[프로그래머스 인공지능 미니 데브코스] 수업 정리 -2- [Web Application with Flask]

3yeong·2022년 7월 19일
0

Flask

Python 기반 마이크로 웹 프레임워크
다양한 장르의 프로젝트를 진행하다보면 프로젝트 관리를 위해서 독립적인 환경을 구축하는게 편하다.

가상환경 설치 및 생성

pip install virtualenv
virtualenv venv

가상환경 진입하기

./venv/Scripts/activate.bat 

라고 배웠지만 잘 안 되어 찾아보니 powershell 은 조금 다른 방법이였다.

./venv/Scripts/activate.ps1

으로 실행한다. (이때 만일 코드가 안된다면 관리자 모드로 들어가 Set-ExecutionPolicy RemoteSigned 입력하고 Y를 입력하면 된다.)
그리고 실행하면 경로 앞에 (venv)가 뜨는 것을 볼 수 있다.

진입 후 확인

#설치된 모듈 확인, 처음 실행하면 
#numpy, pasdas 등이 설치되어있지 않음을 확인할 수 있다.
pip freeze
#해당 폴더에 flask를 설치하기
pip install flask

flsk 실행하기

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_flask():
	return "Hello World!"

if __name__ == '__main__':
	app.run()
#app.py

위와 같이 코드를 작성하고

flask run #실행

인터넷과 웹

인터넷(Internet)

: 전 세계 컴퓨터를 하나로 합치는 거대한 통신망

웹(Web)

: 인터넷에 연결된 사용자들이 정보를 공유할 수 있는 공간

인터넷 안에 웹이 포함된다. 웹과 메일이 소통하는 방식이 다르다.
웹 페이지의 집합을 웹 사이트라고 한다.

웹 사이트에서 정보 상호작용 방법

관찰 : 신발가게의 작동방식

1.손님이 원하는 색상과 사이즈를 담은 신발을 요청 한다.
2.직원이 해당 요청을 처리 한다.
3.손님의 요청에 응답 한다.

우리가 Web을 사용하는 방법

1.웹 브라우저(chrome, safari...)를 켠다.
2.주소창에 주소를 입력한다.
3.Enter를 누르면 원하는 정보가 나온다.
3-1.혹은 에러페이지가 나온다.

Web의 동작방식

웹은 클라이언트와 서버 사이의 소통이다.
Client : 정보를 요청, Server : 정보를 제공
1.Client가 Server에 정보를 요청(request) 한다.
2.Server는 이 요청받은 정보에 대한 처리를 진행한다.
3.Server가 Client에게 요청에 대해 응답(response) 한다.

프로토콜에 맞는 규칙에 따라서 어떤 정보를 교환한다는 의미이고 우리는 HTTP.를 붙인 request(HTTP Verb), response(HTML)를 주로 사용한다.

Flask with REST API

API

: 프로그램들이 서로 상호작용하는 것을 도와주는 매개체

Think RESTful!

: Representational State Transfer
: 웹 서버가 요청을 응답하는 방법론 중 하나
: 데이터가 아닌, 자원(Resource)의 관점에서 접근

REST API

: HTTP URI (대상의 위치, URL(Locate), 식별)를 통해 자원을 명시하고 HTTP MEethod (GET, POST,PUT 요청)를 통해 해당 자원에 대한 CRUD를 진행

REST API 의 Stateless(무상태성)

Client의 Context를 서버에 유지하지 않는다.
일반적으로 서버는 클라이언트의 요청을 동일하게 응답해주어야 한다. 요청을 독립적으로 간주한다.

  • POST/shoes는 자원에 새로운 정보를 생성
  • GET/shoes는 DB에 shoes가 있는지 확인후 해당 자원 반환
    (서버입장에서) 아이템을 GET하기 위해서 POST를 진행할 필요가 없다. 둘 사이는 독립적이다.

Coffee Shop Menu API 구축

from flask import Flask, jsonify, request

app = Flask(__name__)

menus = [
	{"id" : 1, "name":"Espresso", "price":3800},
	{"id" : 2, "name":"Americano", "price":4100},	
	{"id" : 3, "name":"CafeLatte", "price":4600},		
]

@app.route('/') #home, root
def hello_flask():
	return "Hello World!"

# GET /menus | 자료를 가지고 온다
@app.route('/menus') #menus의 접근 시도
def get_menus():
	return jsonify({"menus" : menus}) #json 파일로 돌아옴

# POST /menus | 자료를 자원에 추가한다.
@app.route('/menus', methods = ['POST']) # get이 기본적으로 되어있음, 리스트 형태로 작성가능
def create_menu():
	# 전달받은 자료를 menus 자원에 추가 (request가 json 형태로 가정)
	request_data = request.get_json() # {'name':..., 'price':...}
	new_menu = {
        'id' : 4,
        'name' : request_data['name'],
        'price' : request_data['price']
        }
    menus.append(new_menu)
    return jsonify(new_menu)

if __name__ == '__main__':
	app.run()
profile
초보 컴공

0개의 댓글