Введение в Flask

Flask — это легкий веб-фреймворк для Python, разрабатываемый и поддерживаемый организацией Pallets.

Он известен своей простотой и гибкостью, позволяя быстро создавать веб-приложения и при этом масштабироваться до сложных проектов.

Flask — это микро-веб-фреймворк, разработанный на Python, который называют микрофреймворком. Основная причина в том, что он сам по себе не привязывает никакие специализированные инструменты или библиотеки зависимостей и изначально не включает распространённые веб-компоненты, такие как слои абстракции баз данных и валидация форм.

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


Что такое Flask

Flask — этоWSGI(Web Server Gateway Interface)фреймворк для веб-приложений.

WSGI — это стандартный интерфейс, определённый в Python, который описывает, как веб-серверы взаимодействуют с веб-приложениями на Python. Его можно представить как «универсальный сокет» мира Python-веба.

Изначально Flask был просто простой обёрткой вокруг Werkzeug и Jinja, а теперь превратился в один из самых популярных веб-фреймворков в сообществе Python.


Основные зависимости

При установке Flask автоматически устанавливаются следующие зависимости, каждая из которых выполняет свою роль:

Библиотеки зависимостей Функция Когда вы с ним сталкиваетесь
Werkzeug Инструментарий WSGI, отвечающий за разбор HTTP-запросов, инкапсуляцию ответов и сопоставление URL-маршрутов При обработке запросов и возврате ответов именно Werkzeug работает под капотом.
Jinja2 Шаблонизатор, отвечающий за рендеринг данных в HTML-страницы Использованиеrender_template()при генерации динамических страниц
Щелчок Фреймворк для инструментов командной строки, предоставляющийflaskтерминальные команды Запускflask run, при настройке команд CLI
itsdangerous Библиотека подписи данных, гарантирующая, что целостность данных не будет нарушена Проверка подписи сессионных cookies.
blinker Механизм сигналов, позволяющий вызывать обратные вызовы при наступлении определённых событий Хотите выполнять пользовательскую логику в начале/конце запроса

Понимание и запоминание: Представьте Flask как автомобиль, Werkzeug — это двигатель (основная мощность), Jinja2 — это салон (та часть, которую видят пользователи), Click — это руль (способ управления), itsdangerous — это ремень безопасности (гарантия безопасности).


Философия дизайна Flask

Две ключевые концепции Flask определяют, как его использовать.

Микрофреймворк, но не микро по возможностям

Ядро Flask очень минималистично, но благодаря богатой экосистеме расширений оно может удовлетворить почти любую потребность.

Он не заставляет вас использовать определённую базу данных, библиотеку форм или структуру проекта — разработчики сами выбирают наиболее подходящие инструменты.

Этот дизайн означает: небольшие проекты не обременяются фреймворком, а большие проекты можно собирать по мере необходимости.

Явное лучше неявного

В отличие от некоторых «всё-в-одном» фреймворков, Flask не делает за вас многое втайне.

Каждую функцию нужно явно подключать и настраивать. При обучении это может потребовать написать несколько дополнительных строк, но взамен вы получаете полный контроль над проектом.

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


Возможности Flask

  • Лёгкость и лаконичность: Flask — это микрофреймворк, который предоставляет самые базовые возможности и не навязывает использование каких-либо конкретных инструментов или библиотек. Его ядро простое и гибкое, что позволяет разработчикам добавлять возможности по мере необходимости.

  • Гибкость: Flask предоставляет базовую структуру фреймворка без обязательной структуры проекта или компонентов; разработчики могут настраивать её в соответствии со своими потребностями.

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

  • Встроенный сервер разработки: Flask поставляется со встроенным сервером разработки, что удобно для локальной отладки и тестирования.

  • Поддержка RESTful: Flask поддерживает разработку RESTful API, что делает его подходящим для создания современных веб-сервисов и приложений.

Если вы раньше использовали Django, у вас может возникнуть ощущение, что Flask «заставляет вас всё делать самому». Именно в этом и заключается замысел Flask: позволить вам чётко понимать, откуда берётся каждая возможность, и полностью контролировать проект.


Сценарии использования Flask

  • Небольшие проекты: Для небольших личных проектов или стартапов простота и гибкость Flask позволяют быстро начать работу и итеративно развивать проект.

  • Разработка прототипов: На ранних этапах разработки продукта Flask можно использовать для быстрого создания прототипов, проверки концепций и пользовательских интерфейсов.

  • Микросервисы: В архитектуре микросервисов Flask можно использовать для создания независимых, лёгких сервисных компонентов.

  • Разработка API: Flask очень хорошо подходит для разработки RESTful API, поскольку его система маршрутизации проста и понятна, что упрощает определение конечных точек API.

  • Образование и обучение: Благодаря простоте использования Flask — отличный инструмент для изучения веб-разработки и программирования на Python.

  • Внутренние инструменты: Flask можно использовать для разработки внутренних корпоративных инструментов или панелей управления, которые обычно не требуют сложных пользовательских интерфейсов.

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

  • Пользовательские веб-приложения: Для веб-приложений, требующих высокой степени настройки, Flask обеспечивает достаточную гибкость для удовлетворения конкретных потребностей.

  • Визуализация данных: Flask можно комбинировать с библиотеками визуализации данных (такими как Bokeh или Plotly) для создания интерактивных веб-приложений визуализации данных.

  • Научные вычисления и анализ данных: Flask можно комбинировать с библиотеками научных вычислений (такими как NumPy, Pandas) для разработки веб-приложений для анализа данных и научных вычислений.

  • Лёгкая CMS: Flask можно использовать для создания лёгких систем управления контентом, особенно когда требуется высокая степень настройки.

  • Веб-скрейпинг: Flask можно использовать как бэкенд проектов веб-скрейпинга, обрабатывая сбор данных и API-запросы.


Компоненты Flask

/Users/tianqixin/example-test/example-article/2026-05-13/images/flask-architecture.svg
  • Экземпляр приложения Flask: Ядро Flask — это экземпляр приложения; приложение инициализируется созданием объекта Flask.

  • Маршруты и функции представления: Маршрутизация сопоставляет URL-адреса с функциями представления, которые обрабатывают запросы и возвращают ответы.

  • Система шаблонов: Flask использует шаблонизатор Jinja2 для рендеринга HTML-страниц, динамически вставляя данные в страницы.

  • Запрос и ответFlask обрабатывает HTTP-запросы и генерирует ответы, поддерживая несколько методов HTTP (таких как GET, POST).


Панорама технологического стека

На рисунке ниже показана типичная слоистая структура приложения Flask, помогающая понять положение каждого компонента с общей точки зрения:

Flask 技术栈分层架构

Другие расширения