Что такое Flask и зачем он нужен

Flask — это микрофреймворк: маленькое ядро, которое превращает обычные функции на Python в веб-приложение, отвечающее на HTTP-запросы.
Суть Flask в одной фразе: ты пишешь функцию, вешаешь на неё URL — и она становится страницей сайта. Всё остальное (шаблоны, формы, базы) подключается по мере надобности, а не навязывается с первого дня.

Когда ты открываешь сайт в браузере, происходит диалог по протоколу HTTP: браузер шлёт запрос («дай мне страницу /about»), сервер возвращает ответ (HTML, картинку, JSON). Между «пришёл запрос» и «ушёл ответ» кто-то должен решить, какой код выполнить. Этим занимается веб-фреймворк. Flask — самый популярный микрофреймворк для Python: его ядро умещается в голове целиком, а сложность добавляется расширениями только тогда, когда она реально нужна.

Слово «микро» здесь не про «игрушечный», а про минимальное навязанное ядро. Flask из коробки даёт маршрутизацию (связь URL и функции), движок шаблонов Jinja2 и удобную работу с запросом и ответом. Он не диктует, какую базу данных брать, как раскладывать папки, какую ORM использовать. Сравни с Django — там «всё включено»: ORM, админка, формы, аутентификация. Это удобно для больших типовых проектов, но тяжело, если тебе нужен маленький сервис. А FastAPI заточен под асинхронные API с автоматической валидацией через типы. Flask же — золотая середина для обучения и для сайтов среднего размера: понятный, гибкий, с гигантской экосистемой.

Версия, на которую мы ориентируемся, — Flask 3.x (актуальная ветка 3.1). Здесь требуется Python 3.9+, давно убраны устаревшие вещи, а рекомендованные практики — фабрика приложения и блюпринты — стали стандартом даже для маленьких проектов. Мы будем учить именно современный Flask, а не код десятилетней давности из старых туториалов.

Ещё одна важная мысль о месте Flask в экосистеме: он не конкурент Django, а другой инструмент под другие задачи. Django хорош, когда нужен большой типовой портал с админкой и готовой моделью пользователей. Flask выигрывает там, где требуется контроль над каждым решением: микросервис, прототип, нестандартная архитектура, обучение основам веба без магии. Именно поэтому Flask так любят в образовании — он не прячет HTTP за слоями абстракций, а показывает его. Поняв Flask, ты понимаешь, как вообще устроен веб, и легко перейдёшь к любому другому фреймворку, потому что фундаментальные понятия — запрос, ответ, маршрут, шаблон, сессия — везде одинаковы.

Как работает под капотом

Между сетью и твоим кодом стоит соглашение WSGI (Web Server Gateway Interface) — стандарт, по которому веб-сервер передаёт запрос Python-приложению. Flask — это WSGI-приложение: объект, который сервер вызывает на каждый запрос. Поток выглядит так:

  Браузер              WSGI-сервер           Flask-приложение
  ───────              ───────────           ────────────────
   GET /about  ──────▶  принял сокет ──────▶  найти маршрут /about
                                              │
                                              ▼
                                        вызвать view-функцию
                                              │
                                              ▼
   страница   ◀──────  отдать байты ◀──────  вернуть HTML/ответ

В режиме разработки роль WSGI-сервера играет встроенный сервер (Werkzeug). В продакшене его заменяют на Gunicorn или uWSGI — они держат нагрузку, а встроенный сервер для этого не предназначен. Сам Flask лишь маршрутизирует запрос к нужной функции, оборачивает то, что функция вернула, в HTTP-ответ и отдаёт обратно.

Чтобы прочувствовать идею «URL → функция» без самого Flask, смоделируем простейший роутер обычным словарём. Это та же логика сопоставления пути и обработчика, что внутри Flask, только в миниатюре.

routes = {
    "/": lambda: "Главная страница",
    "/about": lambda: "О нас",
    "/contact": lambda: "Контакты",
}

def handle(path):
    view = routes.get(path)
    if view is None:
        return "404 Not Found"
    return view()

for p in ["/", "/about", "/missing"]:
    print(p, "->", handle(p))

Запусти врезку («Попробуй сам ▶») — ты увидишь, как путь превращается в результат функции. Flask делает то же самое, только умеет разбирать параметры в URL, методы (GET/POST) и многое другое.

Частые ошибки

  • Путать Flask и веб-сервер. Flask не слушает порт сам по себе — это делает WSGI-сервер. Встроенный сервер только для разработки.
  • Ждать «батареек в комплекте». В Flask нет встроенной ORM или админки. Это не баг, а философия: подключай только нужное.
  • Учиться по старым туториалам. Код 2015 года часто использует приёмы, которые в 3.x считаются устаревшими. Сверяйся с актуальной документацией.

Best practices

  • Закладывай структуру (фабрика + блюпринты) с самого начала — переписывать потом дороже.
  • Держи зависимости в requirements.txt или pyproject и фиксируй версии.
  • Различай среды: разработка, тесты, продакшен — у них разные настройки.

Что запомнить

  • Flask — микрофреймворк: минимальное ядро плюс расширения по необходимости.
  • Flask — WSGI-приложение; сеть обслуживает отдельный сервер (Werkzeug в разработке, Gunicorn в проде).
  • Маршрут связывает URL и функцию — это центральная идея фреймворка.
  • Ориентир курса — современный Flask 3.x, а не приёмы старых туториалов.

Итог: Flask — это тонкая прослойка между HTTP и твоим Python-кодом. Она превращает функции в страницы, оставляя выбор остальных кирпичиков за тобой. Дальше мы запустим первое приложение и разберём его по строчкам.

Проверьте себя
1. Что означает «микро» в названии микрофреймворка Flask?
AFlask работает только на маленьких сайтах
BМинимальное навязанное ядро, остальное подключается расширениями
CFlask написан на языке C
DПриложение не может превышать 100 строк
2. Какой компонент в продакшене заменяет встроенный сервер разработки?
AJinja2
BWSGI-сервер вроде Gunicorn
CWerkzeug debugger
DSQLAlchemy