python - Flask 中具有可变数量路径参数的正斜杠

标签 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

此外,在我的例子中,可以保证只有分支变量有时可以有两个单词(用正斜杠分隔)或只有一个单词。其他变量保证是单个字。

有什么办法可以实现这个目标吗?

最佳答案

您可以使用 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/

相关文章:

forms - 主模型的创建/编辑 View 中的辅助表属性

python - 使用带有关键字参数的 map() 函数

Python Shelf 能够创建但无法打开 Shelf

python - 部署到 Heroku 时,如何在 Procfile 中使用 Gunicorn 导入自定义模块?

javascript - HTML 到 Python - 数据被视为字符串而不是列表 - 如何强制 Python 处理为多维列表

flask - AWS 弹性 Beanstalk : HTTP Header not appearing in Flask application

heroku - 如何将 Flask static 指向 Amazon S3 URL?

python - python中的短路评估分配?

python - 使用 stomp.py 时,AMQ_SCHEDULED_DELAY 不会延迟消息

python - 在 GStreamer 1.0 中仍然可以使用独立的 Python 元素吗?