Flask:如何存储和检索绑定到请求的值

时间:2014-03-07 17:33:59

标签: flask

我想存储绑定到Flask请求的值, 我希望价值仅在请求时生效 应该在@ app.after_request中可用, 如何实现get_my_request_var和set_my_request_var 在下面的代码中?

@app.route("/aRoute")
def a_function():
    set_my_request_var('aName', request, 123)


@app.after_request
def per_request_callbacks(response):

    v = get_my_request_var('aName', request)

    return response

1 个答案:

答案 0 :(得分:7)

我在flask.g globals object上设置了一个值并在after_request处理程序中检索它:

def set_my_request_var(name, value):
    if 'my_request_var' not in g:
        g.my_request_var = {}
    g.my_request_var[name] = value


@app.after_request
def per_request_callbacks(response):
    values = g.get('my_request_var', {})
    v = values.pop('aName')

    return response


@app.route("/aRoute")
def a_function():
    set_my_request_var('aName', 123)

values.pop()从全局my_request_var上下文中的flask.g字典中删除密钥,以便将来的请求不必处理它。

全局flask.g上下文是线程安全的并且与当前请求相关联;引自documentation

  

根据需要创建和销毁应用程序上下文。 它永远不会在线程之间移动,也不会在请求之间共享。

另一种选择是不在after_request处理程序中处理此问题。使用较新的@flask.after_this_request() decorator来注册 此请求的回调:

from flask import after_this_request


@app.route("/aRoute")
def a_function():
    aName = 123

    @after_this_request
    def this_request_callback(response)
        # do something with `aName` here
        return response            

或者,在辅助函数中:

def something_after_this_request(aName):
    @after_this_request
    def this_request_callback(response)
        # do something with `aName` here
        return response            


@app.route("/aRoute")
def a_function():
    something_after_this_request(123)