Что такое 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-кодом. Она превращает функции в страницы, оставляя выбор остальных кирпичиков за тобой. Дальше мы запустим первое приложение и разберём его по строчкам.