我想存储绑定到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
答案 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)