pip install vritualenv
# 활성화
source venv/bin/activate # 맥, 리눅스
./venv/Scripts/activate.bat # 윈도우즈
# 비활성화
deactivate
# flask도 같이 설치된다.
pip install Flask-RESTful
from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class Item(Resource):
def get(self, name): # Path Parameter
...
return {'result': name}, 200 # JSON return, Status Code
def post(self, name):
data = request.get_json()
pass
api.add_resource(Item, '/item/<string:name>')
app.run(port=5000, debug=True)
Resource
를 상속받은 클래스의 함수명은 HTTP Method의 역할을 한다.
debug=True
를 설정하면 코드 수정 후 저장하면 알아서 재시작한다.
request.get_json(silent=True)
는 JSON 파싱 에러가 나면 None을 리턴한다.
filter(조건 함수, 순회 가능한 데이터)
filter(lambda x: x['name'] == name, items)
next(filter(lambda x: x['name'] == name, items))
이터레이터를 리턴하므로 next()
사용 가능
pip install Flask-JWT
# security.py
from werkzeug.security import safe_str_cmp
def authenticate(username, password):
user = DB에서 유저 가져오기
if user and safe_str_cmp(user.password, password):
return user
def identity(payload):
user_id = payload['identity']
return DB에서 유저 가져오기 by user_id
# app.py
from flask_jwt import JWT
from security import authenticate, identity
app.secret_key = 시크릿키설정
jwt = JWT(app, authenticate, identity)
app.py
의 맨 마지막 코드는 자동으로 /auth
엔드포인트를 만들어준다. 사용자가 유저 이름과 패스워드를 보내면 authenticate
함수로 가서 인증을 하고 JWT 토큰을 리턴해준다. 사용자가 발급받은 토큰을 보내면 identity
함수로 가서 토큰에 담긴 정보 (여기서는 user_id
)를 찾아 사용하면 된다.
HTTP 헤더 Authorization에 JWT [토큰] 이라고 써서 보내주어야 한다!
from flask_jwt import jwt_required
@jwt_required()
def get(self, name):
pass
from flask_restful import reqparse
class Item(Resource):
parser = reqparse.RequestParser()
parser.add_argument('price', type=float,
required=True, help='This field cannot be blank!')
def put(self, name):
data = Item.parser.parse_args()
...
parser.add_argument()
에 등록된 키만 사용할 수 있다.
Flask-RESTful 공식 문서에 버전 2.0 부터 모든 파서 기능이 사라질 수 있다고 경고되어 있다.