我在Flask中制作了一个API,该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
此外,在我的情况下,可以保证只有分支变量有时可以有两个单词(由正斜杠分隔)或只有一个单词。其他变量保证为单个单词。
有什么办法可以实现?
答案 0 :(得分:0)
您可以使用烧瓶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