我在 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
此外,在我的例子中,可以保证只有分支变量有时可以有两个单词(用正斜杠分隔)或只有一个单词。其他变量保证是单个字。
有什么办法可以实现这个目标吗?
最佳答案
您可以使用 Flask path
路由转换器 https://flask.palletsprojects.com/en/1.1.x/quickstart/#routing将包括斜杠在内的整个路线作为单个变量传递给您的 View 函数。
@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
关于python - Flask 中具有可变数量路径参数的正斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58133133/