python - 在 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
此外,在我的情况下,可以保证只有分支变量有时可以有两个单词(由正斜杠分隔)或只有一个单词。其他变量保证为单个单词。
有什么办法可以做到这一点?
解决方案
您可以使用烧瓶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
推荐阅读
- flutter - Flutter:连接小部件包装器提供程序错误
- google-sheets - G-Sheets 计数单元格并在 0 上显示空单元格
- c# - 两个对象的EF Core保存错误取决于第二个等于一个
- oracle - 如何将整行作为记录传递给oracle触发器中的函数
- linux - InfluxDB 拒绝连接
- dataframe - Groupby 与 Julia Dataframe 上的总和
- python - 在python中使用散点矩阵图
- sql - 通过去除强制转换和函数来提高查询效率
- reactjs - 如何在 React JS 中使用 axios 从 Mongoose 保存函数中获取返回值?
- java - ADLS Gen2 中文件的 Java 文件对象