Подтвердить что ты не робот

Колба: получить текущий маршрут

В Flask, когда у меня есть несколько маршрутов для одной и той же функции, как я могу узнать, какой маршрут используется в данный момент?

Например:

@app.route("/antitop/")
@app.route("/top/")
@requires_auth
def show_top():
    ....

Как я могу узнать, что теперь меня вызывали с помощью /top/ или /antitop/?

UPDATE

Я знаю о request_path Я не хочу использовать его, потому что запрос может быть довольно сложным, и я хочу повторить логику маршрутизации в функции. Я думаю, что решение с url_rule является лучшим.

4b9b3361

Ответ 1

самый "фласковый" способ проверить, какой маршрут вызвал ваше представление, request.url_rule.

rule = request.url_rule

if 'antitop' in rule.rule:
    # request by '/antitop'

elif 'top' in rule.rule:
    # request by '/top'

Ответ 2

Просто используйте request.path.

from flask import request

...

@app.route("/antitop/")
@app.route("/top/")
@requires_auth
def show_top():
    ... request.path ...

Ответ 3

Другой вариант - использовать переменную конечной точки:

@app.route("/api/v1/generate_data", methods=['POST'], endpoint='v1')
@app.route("/api/v2/generate_data", methods=['POST'], endpoint='v2')
def generate_data():
    version = request.endpoint
    return version

Ответ 4

Если вам нужно различное поведение для каждого маршрута, то нужно сделать два обработчика функций.

@app.route("/antitop/")
@requires_auth
def top():
    ...

@app.route("/top/")
@requires_auth
def anti_top():
    ...

В некоторых случаях ваша структура имеет смысл. Вы можете установить значения для каждого маршрута.

@app.route("/antitop/", defaults={'_route': 'antitop'})
@app.route("/top/", defaults={'_route': 'top'})
@requires_auth
def show_top(_route):
    # use _route here
    ...

Ответ 5

Мне кажется, что если у вас есть ситуация, когда это имеет значение, вы не должны использовать одну и ту же функцию в первую очередь. Разделите его на два отдельных обработчика, каждый из которых вызывает общую фикцию для общего кода.