我是 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)
执行此 View (以及许多其他 View )后,我想更新我的数据库,但需要访问变量 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
您可以将对象添加到 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
上下文是线程安全的并且绑定(bind)到当前请求;引用自 documentation :
The application context is created and destroyed as necessary. It never moves between threads and it will not be shared between requests.
我是一名优秀的程序员,十分优秀!