Рассказываем об особенностях популярного микровеб-фреймворка Flask, предназначенного для разработки на Python, и приводим список полезных ресурсов с его документацией и руководствами, в том числе на русском языке.
Что такое Flask
Flask — это микровеб-фреймворк, написанный на Python. Он считается микрофреймворком, поскольку в него не включены специальные инструменты и библиотеки. Например, у него нет собственных уровня абстракции базы данных, проверки форм и многих других компонентов, но к нему легко подключаются сторонние библиотеки, которые предоставляют такие функции.
В отличие от Flask, другие популярные фреймворки Python, например, Django, — это веб-фреймворки, созданные по принципу «всё включено», когда все самые необходимые функции для создания веб-приложений поставляются вместе с фреймворком, а не в виде отдельных библиотек, таких как ORM, шаблонизатор, аутентификация пользователей и т. д. — как это реализовано во Flask.
Особенности Flask
- Модульный фреймворк, в котором весь необходимый функционал подключается с помощью внешних библиотек и плагинов.
- Даёт полный контроль над проектом.
- Требует установки сторонних приложений и дополнительной настройки на начальном этапе и в процессе работы над проектом. Настройка приложения для простых проектов не займёт много времени; но на подключение дополнительных функций и плагинов для сложных проектов его может понадобиться ощутимо больше.
- Подходит для проектов любых размеров, преимущественно с нетипичными требованиями.
- Отсутствует встроенная поддержка СУБД, но с помощью соответствующих расширений можно использовать реляционные базы данных; также фреймворк подходит для проектов с NoSQL или без баз данных.
- Есть встроенная поддержка виртуальной отладки.
- Обширная документация, в том числе на русском языке; большое количество руководств и обучающих материалов.
Структура проекта
Полнофункциональные фреймворки создают довольно сложную, разветвлённую структуру, например, типичный проект Django с одним приложением выглядит так:
django-project
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.js
└─── app
├── __init.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── urls.py
└── views.py
При этом Flask, как микрофреймворк, изначально может создать всего один файл приложения:
flask-project
└── app.py
Содержимое единственного файла, достаточное для начала разработки:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, {}!</h1>'.format(name)
Из-за такой структурной простоты микрофреймворк отлично подходит новичкам, ведь с ним не нужно ещё на старте разбираться в назначении папок и файлов и подстраиваться под структуру по умолчанию. В проектах Flask пользователь начинает работать с одним файлом и добавляет больше файлов по мере необходимости, понимая, что и зачем он делает.
Расширения
С Flask разработчик может выбирать компоненты своего приложения или даже писать собственные, так как фреймворк изначально разрабатывался с расчётом на расширение.
Расширения — это дополнительные пакеты, которые добавляют функциональность приложению. Например, расширение может добавлять поддержку отправки электронной почты или подключения к базе данных. Некоторые расширения добавляют целые новые фреймворки для помощи в создании определённых типов приложений, таких как REST API. Расширения Flask обычно называются «Flask-Foo» или «Foo-Flask», а их установка и настройка в большинстве случаев практически одинаковы.
Таким образом, микрофреймворк — это надёжное ядро с базовыми функциями, необходимыми всем веб-приложениям. А все остальное может быть предоставлено многочисленными сторонними расширениями.
Шаблоны
Flask не содержит собственного шаблонизатора, но он поставляется с зависимостью от шаблонизатора Jinja2, что упрощает работу.
Административная панель
Чтобы использовать панель администратора, также понадобится установить расширение. Flask-Admin предоставляет пользовательский интерфейс для управления данными, к тому же он совместим с популярными плагинами для аутентификации.
Формы
Чтобы использовать формы, нужно установить расширение WTForms следующей командой:
pip install flask-wtf
В WTForms каждая веб-форма является классом, который наследуется от класса FlaskForm, поля формы являются переменными класса. К каждому объекту поля может быть прикреплён один или несколько валидаторов.
Базы данных
В отличие от Django, который поставляется с ORM, Flask не имеет встроенной ORM-библиотеки, позволяющей связать базы данных с кодом приложения — для реализации этой функции нужно устанавливать сторонние расширения. Одним из самых популярных вариантов является SQLAlchemy, который интегрирован с Flask в пакете под названием Flask-SQLAlchemy.
Аутентификация
Flask также не имеет собственных инструментов аутентификации. Для подключения этой функции понадобится установить несколько библиотек, таких как:
- Flask-Login, которая обеспечивает управление сеансами пользователей.
- Werkzeug — позволяет хеширование и проверку.
- Itsdangerous — инструменты для передачи данных в ненадёжные среды и их возврата в целости и сохранности. Данные криптографически подписаны, чтобы гарантировать, что токен не был подделан.
Конечно, подключаемые расширения зависят от типа аутентификации, которую вы планируете использовать. Но даже в базовой форме потребуется глубокая предварительная настройка инструментов, которые соответствует потребностям проекта.
Полезные ресурсы: информация о плагинах, документация, руководства на русском
- Официальный реестр расширений Flask
- Официальная англоязычная документация
- Документация Flask (русский перевод-2018)
- Ещё один перевод документации на русский язык (учебник по Flask Мигеля Гринберга, обновлённое издание 2024 года)
- Руководства для новичков на английском:
- Простые видеоинструкции на русском языке
Подведём итоги
С фреймворком Flask разработчик начинает практически с нуля, добавляя больше функций по мере необходимости и формируя уникальную структуру проекта. Flask имеет развитую экосистему, огромное сообщество и обширную документацию, поэтому получить поддержку или найти помощь в решении проблем не составит труда.
Читайте в блоге: