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

Flask:如何存储和检索绑定到请求的值,flask,Flask,我想存储一个绑定到烧瓶请求的值, 我希望价值观只在请求时存在,并且 应在@app中提供。在您请求后, 如何实现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):

我想存储一个绑定到烧瓶请求的值, 我希望价值观只在请求时存在,并且 应在@app中提供。在您请求后, 如何实现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
我在上设置了一个值,并在请求后的
处理程序中检索该值:

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()

全局
flask.g
上下文是线程安全的,并且与当前请求绑定;引述:

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

另一个选项是不在请求后处理程序中处理此问题。请改用较新版本为该请求注册回调:

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)

两个问题:1)全局g是否在请求之间共享,2)如果values.pop()从未被调用(抛出异常),会发生什么情况,var是否会永远保持
g
在我的情况下不可用,因为我想保证每个请求都会得到一个清除的插槽。装饰器在我的例子中也不可用,因为我将根据动态条件设置值。谢谢你的回答@马克斯:事实上,我错了
g
在请求之间被清除,它出现了。@MaxL:很抱歉这里的混乱。更新以确认
g
仅包含每个请求的数据。感谢您的完整回答!根据您使用它的目的,最好使用像memcache或redis这样的k/v存储。