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
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_flask():
return "Hello World!"
if __name__ == '__main__':
app.run()
#app.py
위와 같이 코드를 작성하고
flask run #실행
: 전 세계 컴퓨터를 하나로 합치는 거대한 통신망
: 인터넷에 연결된 사용자들이 정보를 공유할 수 있는 공간
인터넷 안에 웹이 포함된다. 웹과 메일이 소통하는 방식이 다르다.
웹 페이지의 집합을 웹 사이트라고 한다.
1.손님이 원하는 색상과 사이즈를 담은 신발을 요청 한다.
2.직원이 해당 요청을 처리 한다.
3.손님의 요청에 응답 한다.
1.웹 브라우저(chrome, safari...)를 켠다.
2.주소창에 주소를 입력한다.
3.Enter를 누르면 원하는 정보가 나온다.
3-1.혹은 에러페이지가 나온다.
웹은 클라이언트와 서버 사이의 소통이다.
Client
: 정보를 요청, Server
: 정보를 제공
1.Client가 Server에 정보를 요청(request) 한다.
2.Server는 이 요청받은 정보에 대한 처리를 진행한다.
3.Server가 Client에게 요청에 대해 응답(response) 한다.
프로토콜에 맞는 규칙에 따라서 어떤 정보를 교환한다는 의미이고 우리는 HTTP.를 붙인 request(HTTP Verb), response(HTML)를 주로 사용한다.
: 프로그램들이 서로 상호작용하는 것을 도와주는 매개체
: Representational State Transfer
: 웹 서버가 요청을 응답하는 방법론 중 하나
: 데이터가 아닌, 자원(Resource)의 관점에서 접근
: HTTP URI (대상의 위치, URL(Locate), 식별)를 통해 자원을 명시하고 HTTP MEethod (GET, POST,PUT 요청)를 통해 해당 자원에 대한 CRUD를 진행
Client의 Context를 서버에 유지하지 않는다.
일반적으로 서버는 클라이언트의 요청을 동일하게 응답해주어야 한다. 요청을 독립적으로 간주한다.
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()