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:获取当前路线的主要内容,如果未能解决你的问题,请参考以下文章

获取当前路线名称?

如何在颤动中获取当前路线名称?

如何获取当前路线

如何在 Sinatra 中获取当前路径/路线?

Angular 2 获取当前路线

在 Ember 中获取当前路线名称