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