Прямая косая черта, имеющая переменный номер параметра пути во Flask - PullRequest
1 голос
/ 27 сентября 2019

Я создал API во Flask, в котором определен следующий маршрут.

@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

Кроме того, в моем случае гарантируется, что толькопеременная ветви может иногда иметь два слова (разделенных косой чертой) или иметь одно слово.Остальные переменные гарантированно будут одним словом.

Есть ли способ, которым я могу этого достичь?

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете использовать колбу 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...