Глава 22 · Веб-разработка с Python

Маршрутизация во Flask: URL и функции-обработчики

От HTTP-запроса до вызова нужной функции — устройство маршрутизации Flask.

Раздел 22.5 уже показал @app.route("/") — но что именно Flask делает с этим декоратором? Разберём весь путь одного запроса внутри приложения.

GET /task/42
HTTP-запрос от браузера
Маршрутизатор Flask
ищет подходящее правило
Функция-обработчик
view function
Шаблон или данные
строится содержимое ответа
HTTP-ответ
возвращается браузеру
Путь одного запроса внутри Flask-приложения

Каждый вызов @app.route(...) регистрирует правило (URL rule) — сам шаблон пути, например /task/<int:task_id>. Совокупность всех правил называют маршрутизацией (routing). У каждого правила есть также эндпоинт (endpoint) — символическое имя, под которым Flask знает связанную функцию: по умолчанию это имя самой функции. Именно по эндпоинту, а не по URL напрямую, url_for(...) строит адрес — это и позволяет менять сам путь, не трогая код, который на него ссылается. Когда приходит запрос, Flask ищет среди зарегистрированных правил подходящее по пути и методу и вызывает связанную с ним функцию-обработчик — вы уже видели этот механизм в разделе 22.5, просто без названий.

Параметр пути — типизированная часть URL

Часть пути в угловых скобках Flask передаёт в функцию как аргумент. Можно указать её ожидаемый тип прямо в правиле:

path_param.py
@app.route("/task/<int:task_id>")
def poluchit_zadachu(task_id):
    return f"Задача №{{task_id}}"
<int:task_id> — нечисловой адрес отклоняется до вызова функции
Если открыть /task/abc, Flask не вызовет poluchit_zadachu() вообще — правило <int:task_id> требует целое число, и запрос получит стандартный ответ 404 (раздел 22.9) прежде, чем дойдёт до вашего кода.

Функция-обработчик возвращает содержимое ответа

То, что возвращает функция, становится телом HTTP-ответа: строка, отрендеренный шаблон (раздел 22.12) или, например, словарь — такой словарь Flask преобразует в JSON (раздел 22.15-22.16). Именно поэтому обработчики называют функциями представления (view functions): их задача — подготовить представление данных для конкретного запроса.

Практика: маршруты и параметры пути
Модуль flask не установлен в браузерном окружении Pyodide — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →