Flask - 2. Flask-RESTful

폐쇄맨·2020년 12월 9일
1

Flask

목록 보기
2/2

가상환경 설정

pip install vritualenv

# 활성화
source venv/bin/activate 	# 맥, 리눅스
./venv/Scripts/activate.bat	# 윈도우즈

# 비활성화
deactivate

Flask-RESTful

설치

# 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(조건 함수, 순회 가능한 데이터)
filter(lambda x: x['name'] == name, items)
next(filter(lambda x: x['name'] == name, items)) 

이터레이터를 리턴하므로 next() 사용 가능

Flask-JWT

설치

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

Flask-RESTful JSON Parser

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 부터 모든 파서 기능이 사라질 수 있다고 경고되어 있다.

profile
폐쇄맨

0개의 댓글