首页 > 解决方案 > 在 Flask 中具有可变数量的路径参数的正斜杠

问题描述

我在 Flask 中创建了一个 API,其中定义了以下路由。

@app.route("/<project>/<branch>/<patch>")

一切都按预期工作,但问题是,有时,branch参数可能包含由正斜杠分隔的两个单词,如下所示:a/b.

当请求如下时,我定义了路由的函数可以正常工作:

https://webservice-hostname/abc/def/ghi

但是,如果请求在这样的 URL 上,它就无法工作: https://webservice-hostname/abc/def/ghi/jkl

在这种情况下,我希望它是这样的:

project = abc
branch = def/ghi
patch = jkl

此外,在我的情况下,可以保证只有分支变量有时可以有两个单词(由正斜杠分隔)或只有一个单词。其他变量保证为单个单词。

有什么办法可以做到这一点?

标签: pythonflask

解决方案


您可以使用烧瓶path路由转换器https://flask.palletsprojects.com/en/1.1.x/quickstart/#routing将包括斜线在内的整个路由作为单个变量传递给您的视图函数。

@app.route("/<path:project_branch_patch>")

对于只有分支可以包含斜杠的简单用例,在没有包含斜杠的情况下,只需定义两个具有默认值的路由可能会更容易。

@app.route("/<project>/<branch1>/<patch>", defaults={"branch2": ""})
@app.route("/<project>/<branch1>/<branch2>/<patch>")
def myview(project, branch1, branch2, patch):
    branch = "{}/{}".format(branch1, branch2) if branch2 else branch1

推荐阅读