我是Flask的新手,我正在了解@app.after_request
和@app.teardown_appcontext
。我有一个decorated view oauthlib接受一个参数,data
(这是一个对象)。
@app.route('/api/me')
@oauth.require_oauth()
def me(data):
user = data.user
return jsonify(username=user.username)
执行此视图(以及许多其他视图)后,我想更新我的数据库,但需要访问变量data
。如何使用@app.after_request
或@app.teardown_appcontext
?
@app.after_request
def record_ip(response):
client = data.client # needs access to "data"
.... log stuff in my database ...
return response
答案 0 :(得分:3)
您可以将对象添加到flask.g
globals object:
from flask import g
@app.route('/api/me')
@oauth.require_oauth()
def me(req):
user = req.user
g.oauth_request = req
return jsonify(username=user.username)
@app.after_request
def record_ip(response):
req = g.get('oauth_request')
if req is not None:
client = req.client # needs access to "req"
# .... log stuff in my database ...
return response
全局flask.g
上下文是线程安全的并且与当前请求相关联;引自documentation:
根据需要创建和销毁应用程序上下文。 它永远不会在线程之间移动,也不会在请求之间共享。