Flask リクエスト後の処理 (after_request)

サーバーからのレスポンスがスーパースローだった。処理の途中でいったんレスポンスを返すことを考えた。どうすればいいのか。以下に説明した。

まず、
from flask import g

def after_this_request(func):
    if not hasattr(g, 'call_after_request'):
        g.call_after_request = []
    g.call_after_request.append(func)
    return func


@app.after_request
def per_request_callbacks(response):
    for func in getattr(g, 'call_after_request', ()):
        response = func(response)
    return response
をコピペしソースコードにベタ書きしておき、次のようにレスポンスを受け取って返せばよいらしい。
@app.route('/')
def index():
    @after_this_request
    def do_this_after_request(response):
        # Do something:
        return response

具体例は
def invalidate_username_cache():
    @after_this_request
    def delete_username_cookie(response):
        response.delete_cookie('username')
        return response
のようにして使う。

Bibliography




コメント