FLASK 기초(3) - Request hooks & Context

이윤택·2022년 6월 18일
0

FLASK

목록 보기
3/3

Request Hooks

  • 리퀘스트가 발생하고, 리퀘스트 전 후 등의 이벤트를 트리거하여 컨트롤 할 수 있다.
    ex) 리퀘스트 전 유저 토큰(혹은 세션) 확인, 리퀘스트 후 데이터베이스 세션 닫기

before_request

@app.before_request
def before_request():
	app.logger.info('BEFORE_REQUEST') 

before_first_request

  • 맨 처음 한 번만 실행
@app.before_first_request
def before_first_request():
    app.logger.info('BEFORE_FIRST_REQUEST')

after_request

  • after_request는 인자를 받음
@app.after_request
def after_request(response):
    app.logger.info('AFTER_REQUEST')
    return response

teardown_request

  • after_request 다음에 실행
@app.teardown_request
def teardown_request(exception):
    app.logger.info('TEARDOWN_REQUEST')

Application Context

우선, Flask에서 말하는 Context가 뭔지 이해할 필요가 있다. Flask에서 Context는 request를 처리하거나 CLI 명령어를 처리하기 위해 필요한 정보들을 저장하고 제공하기 위해 사용된다. 그 중 Application Context는 application level의 데이터를 보관한다(logger, database configuration). 그리고 두 개의 객체를 외부에 노출시킨다

  • current_app : 현재 request를 핸들링 하고있는 app instance를 참조(run() 할 때 실행되는 app)
  • g : request를 처리할 때 잠시 temporary 저장소로 사용된다(요청 중 자원관리 용도). database config 같은 request를 처리하는 동안 잠시 저장한다. request가 끝날 때 마다 g에 있는 데이터는 모두 초기화
@app.before_request
def before_request():
    g.test=True
    app.logger.info('BEFORE_REQUEST')

@app.after_request
def after_request(response):
    app.logger.info('g.test : {}'.format(g.test))
   #app.logger.info('current_app.cofig{}'.format(current_app.config))
    app.logger.info('AFTER_REQUEST')
    return response

Request

@app.route('/test/method/<id>')
def method_test(id):
    return jsonify({
        'request.args':request.args,
        'request.form':request.form,
        'request.json':request.json
        })
profile
데이터 엔지니어로 전향중인 백엔드 개발자입니다

0개의 댓글