Flask:获取当前路线
Posted
技术标签:
【中文标题】Flask:获取当前路线【英文标题】:Flask: get current route 【发布时间】:2014-02-25 05:55:47 【问题描述】:在 Flask 中,当我有多个相同功能的路由时, 我怎么知道当前使用的是哪条路线?
例如:
@app.route("/antitop/")
@app.route("/top/")
@requires_auth
def show_top():
....
我怎么知道,现在路由是使用/top/
或/antitop/
调用的?
更新
我知道request.path
我不想使用它,因为请求可能相当复杂,我想在函数中重复路由逻辑。我认为url_rule
的解决方案是最好的。
【问题讨论】:
***.com/a/15975041/743775 应该怎么做? 【参考方案1】:只需使用request.path
。
from flask import request
...
@app.route("/antitop/")
@app.route("/top/")
@requires_auth
def show_top():
... request.path ...
【讨论】:
投票只是因为您对导入语句感到困扰。 @MichaelScheper 同意,任何类型代码的许多代码 sn-ps 都不包含导入语句【参考方案2】:通过request.url_rule
来检查触发您的视图的最“简单”的方法是。
from flask import request
rule = request.url_rule
if 'antitop' in rule.rule:
# request by '/antitop'
elif 'top' in rule.rule:
# request by '/top'
【讨论】:
这是一个很好的解决方案,但请考虑 @marcinkuzminski 的解决方案。我认为它更优雅。 如果路由是variable rule@app.route('/user/<username>')
,则此操作失败
@gerardw request.url_rule.rule
就是这样。它会根据需要返回 /user/<username>
。【参考方案3】:
另一种选择是使用端点变量:
@app.route("/api/v1/generate_data", methods=['POST'], endpoint='v1')
@app.route("/api/v2/generate_data", methods=['POST'], endpoint='v2')
def generate_data():
version = request.endpoint
return version
【讨论】:
用点而不是斜线显示路线。即subunit.page
而不是/subunit/page
【参考方案4】:
如果您希望每个路由具有不同的行为,正确的做法是创建两个函数处理程序。
@app.route("/antitop/")
@requires_auth
def top():
...
@app.route("/top/")
@requires_auth
def anti_top():
...
在某些情况下,您的结构是有意义的。您可以为每条路线设置值。
@app.route("/antitop/", defaults='_route': 'antitop')
@app.route("/top/", defaults='_route': 'top')
@requires_auth
def show_top(_route):
# use _route here
...
【讨论】:
【参考方案5】:在我看来,如果您遇到重要的情况,您一开始就不应该使用相同的功能。将其拆分为两个单独的处理程序,每个处理程序调用共享代码的共同虚构。
【讨论】:
我认为url_rule
的解决方案是最好的,但还是谢谢你+1以上是关于Flask:获取当前路线的主要内容,如果未能解决你的问题,请参考以下文章