Обложка: Обзорный анализ Python веб-фреймворков

Обзорный анализ Python веб-фреймворков

Вместе с ML и data scince, web является одним из трёх китов, на которых стоит популярность языка Python. В данном анализе опустим все прелести Python и рассмотрим только веб-инструментарий, то есть фреймворки. Посмотрим, что выгодно отличает их от фреймворков в других языках, и разберём, в чём они конкурируют между собой.

Полезен такой разбор, думаю, будет в первую очередь тем, кто только входит в веб-разработку на Python. А также тем, кто не знает к изучению какой следующей технологии приступить.

Судя по анализу 60 вакансий на позицию Python-разработчика на портале dou.ua, сегодня на рынке востребованы следующие фреймворки (для каждой технологии указано количество связанных вакансий):

Django — 21;

Flask — 13;

Aiohttp — 5;

FastAPI — 4;

Falcon — 1;

Bottle — 1.

В виде диаграммы представить данную информацию можно так:Иллюстрация: фреймворки Python

Для меня оказалось неожиданным, что Django упомянут в большинстве вакансий. Ещё удивило присутствие Bottle.

Определим критерии для сравнения инструментов:

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

Итак, перейдём к самому анализу и начнём, пожалуй, с фаворита рынка — Django.

Django

История этого фреймворка Python начинается в 2003 году, когда разработчики из американской газеты Lawrence Journal-World решили пилить феб-приложения на Python. Уже в 2005 году ребята выкатили в свободное плавание своё детище как веб-фреймворк.

Чем Django так хорош?

Модульность и расширяемость

Во-первых, к модульности принуждает MTV (model-template-view) архитектура фреймворка. С бизнес-логикой приложения, его визуальным оформлением, структурой данных, разработчик работает отдельно.

Хорошая практика в Django — выделять логически обособленный функционал приложения в отдельный application внутри фреймворка. По сути, вы легко компонуете проект из апликейшинов как из конструктора лего.

В Django присутствует каталог на сотни плагинов, которые решают задачи от настройки sitemap до развёртывания полноценной CMS и создания REST API.

Помимо предусмотренных разработчиками фреймворка решений, достаточно просто подключаются аналоги (например Jinja2 вместо стандартного шаблонизатора Django). Хотя заменить, например, ORM достаточно тяжело.

Развитая экосистема

Как я уже упомянул, существуют сотни плагинов для Django, решающих ряд насущных нужд. Помимо сахара в виде таких плагинов фреймворк самодостаточен. «Из коробки» встроены ORM, шаблонизатор, мультиязычность, админ-панель, автоматическая документация и так далее.

Система фреймворка настолько модульна, что параллельно может выполняться разработка бизнес-логики приложения, его API, внешних представлений, наполнение приложения информацией SMM-менеджерами и так далее.

Стабильность

В некой мере этот пункт можно отнести и к экосистеме. Django имеет полную и достаточно качественную документацию. Существуют её переводы — в том числе и на русский язык.

Сообщество разработчиков на Django насчитывает тысячи человек. На любой вопрос разработчик гарантированно найдёт ответ.

Фреймворк используется с 2005 года, и за 16 лет множество багов было устранено, а фич реализовано и улучшено.

Django развивается и поддерживается огромным комьюнити. Django Software Foundation — это некоммерческая организация, которая поддерживает обучение фреймворку, его развитие и распространение.

На Django написаны YouTube, Instagram, Pinterest, Google. А такие проекты, работающие на Django, подтверждают стабильность экосистемы при работе с большими нагрузками.

Минусы Django:

Для небольших проектов функционал Django избыточен, но в то же время возможности асинхронности в нём весьма ограничены. Поэтому для работы с легкими или асинхронными проектами предпочитают использовать другие фреймворки. Многие встроенные модули достаточно тяжело заменить — админ-панель не всегда легко кастомизировать, а про ORM я уже упоминал. И она, кстати, значительно уступает по гибкости SQLAlchemy.

Итоги:

  • документация — 5;
  • комьюнити — 5;
  • архитектура — 4;
  • функционал — 4;
  • настройка — 5.

Flask

Flask был создан в 2010 году австрийским программистом Армином Ронахером в качестве первоапрельской шутки. В одном проекте он попробовал собрать свои библиотеки — шаблонизатор Jinja и Werkzeug — инструментарий для WSGI (стандартного интерфейса Python между веб-сервисами). В результате вышел фреймворк Python, о котором мы сейчас и говорим.

За что любят Flask?

Лёгкость

По своей сути Flask — это скелет, на который разработчик может навесить любой удобный для него инструментарий. Причём этот инструментарий не навязывается фреймворком, как в случае с Django. Например, выбирая Flask для проекта, разработчик волен в выборе ORM. Как правило, выбор падает на SQLAlchemy.

Соответственно, Flask выбирают для большего контроля над используемыми компонентами, обретения навыков в настройке и конфигурировании проект. И когда нужен легкий бэк.

По умолчанию Flask предоставляет:

  • сервер разработки и отладчик;
  • интегрированные инструменты для модульного тестирования;
  • возможность отправки REST запросов;
  • шаблонизатор Jinja2;
  • пакеты-расширения, например flask-login, flask-sqlalchemy, flask-wtf.

Комьюнити

По состоянию на 2016 год, репозиторий с Flask был самым популярным репозиторием Python на GitHub. В него было внесено более 3 тысяч изменений, у него больше 29 тысяч звезд, а за изменениями следят почти 2 тысячи пользователей. Более 250 разработчиков внесли свой вклад.

Благодаря Flask работают Pinterest и LinkedIn.

Поиск ответа на вопросы, связанные с фреймворком, не займёт много времени как и в случае с Django.

Документация

Документация по Flask покрывает практически все возможные вопросы связанные с фреймворком и имеет перевод на русский язык. Она покрывает в том числе разные варианты развёртывания приложения и вопросы подключения сторонних модулей к проекту. Например SQLAlchemy.

Минусы Flask:

Несмотря на все плюсы и простоту фреймворка, он остаётся всего лишь ядром, которое зависит от двух внешних библиотек (Jinja и Werkzeug) и к которому прикрепляются сторонние инструменты.

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

Итоги:

  • документация — 5;
  • комьюнити — 5;
  • архитектура — 3;
  • функционал — 3;
  • настройка — 4.

Aiohttp

Aiohttp — это веб-сервер для asyncio. Соответственно имеет весьма ограниченный функционал как самостоятельный инструмент и предназначен для решения узкого круга задач.

В чём особенность инструмента?

Столп на котором базируется Aiohttp — вебсокеты.

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

Веб-сокеты стоит использовать в:

  • приложениях реального времени;
  • чат-приложениях;
  • IoT-приложениях;
  • многопользовательских играх.

Минусы

Скудная документация, хоть она и имеет примеры выполнения некоторых задач. Например сокращатель ссылок, клон твиттера, чат, и так далее. Также, разработчику, особенно начинающему, будет достаточно трудно найти ответ на вопрос, который может возникнуть при работе с Aiohttp.

Итоги:

  • документация — 3;
  • комьюнити — 3;
  • архитектура — 3;
  • функционал — 3;
  • настройка — 4.

FastAPI

FastAPI — фреймворк Python для лёгкого создания API-серверов со встроенными валидацией, сериализацией и асинхронностью. Стоит он на плечах двух других фреймворков. Работой с web в FastAPI занимается Starlette, за валидацию отвечает Pydantic.

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

  • из коробки возможность работы с GraphQL;
  • встроенные вебсокеты;
  • встроенная аутентификация/автроизация, поддержка JWT, OAuth2;
  • автоматическая документация.

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

Минусы FastAPI

Пожалуй, достаточно небольшое сообщество и не самые простые настройки для корректно работы приложения. А в тандеме это даёт повышеный порог входа в технологию, с которой новичку будет не так просто разобраться (учтём ещё и асинхронность фреймворка).

Итоги:

  • документация — 5;
  • комьюнити — 3;
  • архитектура — 5;
  • функционал — 4;
  • настройка — 3.

Falcon и Bottle

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

Falcon как правило, позиционируется как более быстрый аналог легко масштабируемой API вместо стандартного инструментария Фласка.

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

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации