Сравнение Flask, Django и FastAPI
Flask, Django и FastAPI решают разные классы задач и предоставляют разный набор встроенных возможностей.
Раздел 22.17 показал общую карту. Теперь сравним три самых заметных фреймворка — Flask, Django и FastAPI — по конкретным задачам, а не по общим впечатлениям.
| Критерий | Flask | Django | FastAPI |
|---|---|---|---|
| Назначение | Общего назначения, часто сайты с HTML-страницами | Общего назначения, приложения вокруг базы данных | Прежде всего HTTP API |
| Маршрутизация | Встроенная | Встроенная | Встроенная |
| Шаблоны HTML | Jinja | Встроенный движок шаблонов | Не основная задача — фреймворк ориентирован на API |
| ORM | Нет своего — через сторонний ORM (раздел 22.26) | Да, встроенный | Нет своего — через сторонний ORM |
| Миграции | Нет своих — через сторонний инструмент | Да, встроенные (makemigrations/migrate) | Нет своих — через сторонний инструмент |
| Административный интерфейс | Нет своего | Да, встроенный автоматический | Нет своего |
| Аутентификация | Нет своей — через расширения | Да, встроенная система пользователей | Нет своей — через сторонние библиотеки |
| Проверка данных | Вручную или через расширения | Через формы и сериализаторы Django/DRF | Встроенная, на основе подсказок типов Python |
| OpenAPI | Нет своей | Нет своей в ядре | Да, встроенная, автоматическая |
| WSGI / ASGI (раздел 22.19) | WSGI, с ограниченной поддержкой async-обработчиков | Поддерживает и WSGI, и ASGI режимы развёртывания | ASGI изначально |
| Типичные проекты | Небольшие и средние сайты, простые API | Крупные приложения с базой данных и админкой | HTTP API, сервисы с типизированными данными |
Почему для учебного проекта выбран Flask
В этой главе первый серверный проект построен на Flask. Flask предоставляет основные средства веб-приложения — маршрутизацию, обработку запросов и ответов и работу с шаблонами — без большого набора обязательных подсистем. Поэтому на небольшом учебном проекте удобно последовательно рассмотреть каждый из этих механизмов.
Django предоставляет больше готовых компонентов, например ORM, миграции, аутентификацию и административный интерфейс. FastAPI ориентирован прежде всего на создание HTTP API и тесно использует аннотации типов Python.
Flask выбран здесь как подходящий инструмент для первого учебного веб-приложения. Это не означает, что Flask является лучшим решением для любого проекта.