我希望能够将所有传入的request
中的一些数据添加到烧瓶中的requests
变量中。是否有一种简单的方法可以挂钩,而不必将这个逻辑写入我的每个端点?
答案 0 :(得分:7)
您可能正在寻找flask.Flask.before_request
。请至少浏览API文档,它写得很好,并且可能会提供关键字,您可以搜索以后可能遇到的问题的解决方案。
此外,您不一定能够将数据添加到request
属性form
和args
中,因为它们是不可变的,请考虑使用g
from flask import Flask, request, g
app = Flask(__name__)
@app.route('/')
def home():
return g.target + '\n'
@app.before_request
def before_req():
g.target = request.args.get('target', 'default')
if __name__ == '__main__':
app.run()
3}}
使用示例:
$ wget -qO - 'http://localhost:5000/?target=value'
value
$ wget -qO - 'http://localhost:5000/?key=value'
default
用法:
{{1}}
答案 1 :(得分:0)
在请求钩子函数和视图函数之间共享数据的常见模式是 使用 g 上下文全局。例如,before_request 处理程序可以从数据库加载登录用户并将其存储在 g.user 中。稍后,当调用视图函数时, 它可以从那里访问用户。或者,登录的新用户可能需要执行一些活动才能访问 Web 应用程序中的页面。例如,新用户可能需要在访问 Web 应用程序的主页之前验证他/她的电子邮件。 before_request 装饰器将拦截他打算访问的主页的特定视图函数,并阻止他访问它,直到电子邮件被验证。