Flask: обработать любой url одним обработчиком

В flask можно создавать обработчики запросов, например, следующим образом:

@app.route('/login', methods = ['POST', 'GET'])
def login():
    pass

Но таким образом мне нужно указать url, на котором я слушаю (в примере /login). А я хочу сделать обработчик, который будет вызываться по любому типу запроса на любой url (в том числе с любым количеством /). Естественно, чтобы внутри обработчика я мог получить этот url. Как это можно сделать?


Ответы (1 шт):

Автор решения: Усердный бобёр

Нашёл ответ по ссылке от @andreymal https://stackoverflow.com/a/45777812. Чтобы получить полный путь включая часть после ?, можно использовать request.full_path. MRE:

from flask import Flask
from flask import request
app = Flask(__name__)

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
    return 'Path: ' + str(request.full_path)

if __name__ == '__main__':
    app.run('localhost', 8080)
→ Ссылка