Открыть сервисСервис

Flask — веб-фреймворк на Python

Flask — микрофреймворк для языка программирования Python, предназначенный для создания веб-приложений и программных интерфейсов (API). Относится к классу WSGI-фреймворков и распространяется под лицензией BSD. Отличительная особенность — минималистичное ядро: базовый набор функций не включает встроенную ORM, средства аутентификации или административную панель, а необходимые возможности подключаются через расширения. Автор — Армин Ронахер, первая публичная версия вышла в 2010 году.

История

Flask создан в 2010 году немецким разработчиком Армином Ронахером как эксперимент: он собирал шуточный проект на основе библиотеки Werkzeug и обнаружил, что получившийся каркас удобен для реальной работы. Название отсылает к другому микрофреймворку — Bottle, а также к ироничной традиции давать проектам имена-«сосуды». Первый выпуск состоялся 1 апреля 2010 года.

Основой послужили две независимые библиотеки того же автора:

  • Werkzeug — набор инструментов для WSGI, отвечающий за обработку запросов, маршрутизацию и отладку;
  • Jinja2 — шаблонизатор, формирующий HTML-страницы.

С 2016 года проект развивается под эгидой некоммерческой организации Pallets Projects. Версия 1.0 вышла в 2018 году, 2.0 — в 2021-м, 3.0 — в 2023-м. Фреймворк стабильно входит в число самых популярных инструментов веб-разработки на Python наряду с Django.

Архитектура и устройство

Flask построен вокруг идеи «микроядра». Ядро решает ограниченный круг задач:

Всё остальное выносится в расширения. Такой подход даёт разработчику свободу выбора компонентов: базы данных, форм, системы миграций, кеширования. Типичная структура проекта включает объект приложения, декораторы маршрутов и функции-представления.

Ключевые понятия:

ПонятиеНазначение
Flaskобъект приложения
@app.routeпривязка URL к функции
render_templateвывод HTML-шаблона
requestданные входящего запроса
Blueprintмодульная группировка маршрутов
app contextконтекст приложения и запроса

Расширения и экосистема

Экосистема расширений — одна из сильных сторон Flask. Наиболее распространённые:

  • Flask-SQLAlchemy — интеграция с ORM SQLAlchemy;
  • Flask-Migrate — миграции схемы базы данных;
  • Flask-WTF — работа с формами и защита от CSRF;
  • Flask-Login — управление сессиями пользователей;
  • Flask-RESTful и Flask-RESTX — построение REST API;
  • Flask-Admin — автоматическая административная панель.

Большинство расширений устанавливаются через пакетный менеджер pip и подключаются одной строкой инициализации.

Применение

Flask применяется в нескольких типовых сценариях:

  • REST API и микросервисы — благодаря лёгкости и низкому потреблению ресурсов;
  • прототипы и MVP — быстрый старт без сложной конфигурации;
  • небольшие сайты и внутренние сервисы;
  • машинное обучение — обёртка моделей в веб-интерфейс;
  • интеграционные сервисы — связка между базами данных и внешними системами.

В России Flask используется в учебных курсах по веб-разработке и в коммерческих проектах, где требуется компактный бэкенд. На нём строятся как внутренние корпоративные инструменты, так и публичные сервисы.

Сравнение с Django

Flask часто противопоставляют Django — другому популярному Python-фреймворку.

КритерийFlaskDjango
Типмикрофреймворкполноценный фреймворк
ORMподключается отдельновстроена
Админ-панельчерез расширениевстроена
Порог входанизкийвыше
Гибкостьвысокаяограничена соглашениями
Типовые проектыAPI, микросервисыкрупные сайты, CMS

Django задаёт жёсткую структуру и поставляет готовые решения «из коробки», тогда как Flask оставляет архитектурные решения разработчику.

Пример кода

Минимальное приложение на Flask занимает несколько строк:

```python from flask import Flask app = Flask(__name__)

@app.route("/") def index(): return "Привет, мир!" ```

Запуск выполняется командой flask run или через встроенный сервер разработки. Для промышленной эксплуатации применяют WSGI-серверы Gunicorn или uWSGI в связке с обратным прокси nginx.

Критика

Основные замечания к Flask связаны с его минимализмом: отсутствие единых соглашений приводит к разнородным проектам, а выбор расширений ложится на разработчика. Встроенный сервер разработки не предназначен для production. Часть расширений поддерживается сообществом и может отставать от обновлений ядра. Тем не менее фреймворк остаётся одним из наиболее документированных и востребованных инструментов в экосистеме Python.

Источники

  • Официальная документация Flask (palletsprojects.com)
  • Документация Werkzeug и Jinja2
  • Материалы конференций PyCon, посвящённые веб-разработке
  • Учебные курсы и руководства по Python-фреймворкам
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru