Express MiddleWare란?
어플리케이션의 요청-응답 사이에서 실행되는 함수, 보통 요청 전 처리 혹은 요청 후 처리에 사용된다.
Flask에서 Express MiddleWare를 사용하는 방법
데코레이터 (Decorator)
데코레이터란 함수에 반복적인 기능과 역할을 할 수 있도록 만들어주는 기능이다. 함수 내부 로직 수정 없이 특정 기능을 추가하고 싶을 때 사용한다.
예시로 request 헤더에서 Content-Type을 확인하는 데코레이터를 만들어보자
1. @wraps로 데코레이터로 만들 함수를 정의한다.2. @wraps로 정의 된 함수는 다른 함수를 인자로 받아서 해당 함수가 실행되지 전에 미리 실행한다.3. 인자로 받은 *args, **kwargs를 가져와서 request 데이터를 체크한다.
from flask import request
from functools import wraps
def api_decorator():
def api_auth_decorator(f):
@wraps(f)
def _api_auth_decorator(*args, **kwargs):
result = f(*args, **kwargs)
token = request.headers.get("Authorization")
if token is None:
return {"message": "허가되지 않은 접근입니다.", }, 401
if datetime.datetime.now() >= time_checker(token)
# time_checker는 현재 token의 만료기간을 체크하는 임의의 함수입니다
return {"message": "토큰이 올바르지 않습니다.", }, 401
return result
return _api_auth_decorator
return api_auth_decorator
실제 함수에 데코레이터를 사용하는 방법은 다음과 같다.
@app.route("/test", methods=["POST"])
@api_decorator()
def post_test():
...
Blueprint
flask 블루프린트에서 데코레이터와 비슷한 기능을 제공한다.
before_first_request
플라스크 서버가 실행되고 가장 첫 요청전에 실행됨
from flask import Flask, Response
app = Flask(__name__)
@app.route("/")
def before_first_request():
app.logger.info("첫번째 요청")
return Response(response="before_first_request", status=200)
before_request
매 request 전에 실행됨
from flask import Flask, Response
app = Flask(__name__)
@app.route("/")
def before_request():
app.logger.info("request 이전")
return Response(response="before_request", status=200)
after_request
매 request 이후에 실행됨
from flask import Flask, Response
app = Flask(__name__)
@app.route("/")
def after_request():
app.logger.info("request 이후")
return Response(response="after_request", status=200)
Blueprint에서 실행
from flask import Blueprint, Response
from request import before_request, after_request, before_first_request
bp = Blueprint("test", __name__)
api.before_request(before_request)
api.after_request(after)
@bp.route('/GET', methods=['GET'])
def test_get():
return Response(response="test", status=200)
return
<참고>
- https://www.woolog.dev/backend/flask/using-flask-with-decorator/
'# Development > Flask' 카테고리의 다른 글
[Flask] Slack Bot 으로 서비스 장애 알림 받기 (0) | 2023.03.14 |
---|---|
[Flask] python-dotenv로 개발/배포 환경 분리하기 (0) | 2023.03.06 |
[Flask] CORS (Cross-Origin Resource Sharing) 설정 (0) | 2023.01.19 |