Flask如何在请求之前获取URL变量?

3
在Flask中,我有一些带有变量的URL规则。例如:
my_blueprint.add_url_rule('/<user_token>/bills/',view_func=BillsView.as_view('bills'))

这里将在BillsViewgetpost方法中传递user_token变量。我试图在我的蓝图before_request函数中截取user_token变量。
以下是我的蓝图before_request函数:
def before_req():
  ...
  ...

my_blueprint.before_request(before_req)

我最接近的方法是使用request.url_rule。但它并没有给我变量的内容,只是匹配的规则。
2个回答

10

使用@app.url_value_preprocessor注册URL处理器,该处理器可以获取从URL匹配的端点和值。这个值字典可以被修改,比如弹出一个在视图函数参数中不会使用而是存储在g命名空间中的值。

from flask import g

@app.url_value_preprocessor
def store_user_token(endpoint, values):
    g.user_token = values.pop('user_token', None)

文档包含使用此功能从URL中提取国际化语言代码的详细示例


1
除了上述所描述的 URL 预处理器 之外,另一种显式传递 URL 参数的方法是使用此方法。
@app.before_request
def get_request_args():
    "Provides all request args"
    request_args = {**request.view_args, **request.args} if request.view_args else {**request.args}
    print('All Request args ',request_args)

request.argsrequest.view_args 的文档中可以找到更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接