Маршрутизация во Flask: URL и функции-обработчики
От HTTP-запроса до вызова нужной функции — устройство маршрутизации Flask.
Раздел 22.5 уже показал @app.route("/") — но что именно
Flask делает с этим декоратором? Разберём весь путь одного запроса внутри приложения.
Каждый вызов @app.route(...) регистрирует
правило (URL rule) — сам шаблон пути, например
/task/<int:task_id>. Совокупность всех правил называют
маршрутизацией (routing). У каждого правила есть также
эндпоинт (endpoint) — символическое имя, под которым Flask знает связанную
функцию: по умолчанию это имя самой функции. Именно по эндпоинту, а не по URL напрямую,
url_for(...) строит адрес — это и позволяет менять сам путь, не
трогая код, который на него ссылается. Когда приходит запрос, Flask ищет среди
зарегистрированных правил подходящее по пути и методу и вызывает связанную с ним
функцию-обработчик — вы уже видели этот механизм в разделе 22.5, просто
без названий.
Параметр пути — типизированная часть URL
Часть пути в угловых скобках Flask передаёт в функцию как аргумент. Можно указать её ожидаемый тип прямо в правиле:
@app.route("/task/<int:task_id>")
def poluchit_zadachu(task_id):
return f"Задача №{{task_id}}"
/task/abc, Flask не вызовет poluchit_zadachu() вообще — правило <int:task_id> требует целое число, и запрос получит стандартный ответ 404 (раздел 22.9) прежде, чем дойдёт до вашего кода.Функция-обработчик возвращает содержимое ответа
То, что возвращает функция, становится телом HTTP-ответа: строка, отрендеренный шаблон (раздел 22.12) или, например, словарь — такой словарь Flask преобразует в JSON (раздел 22.15-22.16). Именно поэтому обработчики называют функциями представления (view functions): их задача — подготовить представление данных для конкретного запроса.