Django, Flask и Tornado — самые актуальные и при этом наиболее популярные Python-фреймворки.
Зачем нужны фреймворки
Фреймворки увеличивают скорость написания кода, а также позволяют сосредоточить внимание на логике приложения, а не на написании каких-то базовых функций. Это наборы различных пакетов и модулей, которые помогают разработчикам во многом: например, при работе с базами данных, валидацией, шаблонизацией, обработкой ошибок или защитой программы.
Основное преимущество Python - возможность быстро написать код. Если распространить это суждение на фреймворки, то их главная задача — дать возможность сэкономить время на написании простых команд, что существенно повышает скорость разработки.
Можем сравнить Django, Flask и Tornado по нескольким параметрам: простота входа, производительность, гибкость и асинхронность.
- Django — самый популярный Python-фреймворк, который используют разработчики в Pinterest, Dropbox, Spotify, The Washington Post и т.д. На сегодняшний день сообщество Django насчитывает более 11 тыс. разработчиков из 166 стран мира.
- Flask — это микрофреймворк для разработки на Python минималистичных каркасов веб-приложений. Он предоставляет базовые возможности, а сами приложения реализуют какой-то функционал. С его помощью можно создавать небольшие приложения, для которых не нужен широкий спектр возможностей большого фреймворка — он представляет собой скелет, на который можно установить то, что нужно разработчику.
- Tornado — это относительно быстрый веб-фреймворк, который может обрабатывать тысячи одновременных постоянных подключений. Чаще всего он используется для веб-сокетов и других приложений, которые требуют долговременного соединения с каждым пользователем.
Удобство для новичков
В случае с фреймворками удобство для новичков определяется в первую очередь наличием качественной и структурированной документации и легкостью интеграции. Точно не внешней простотой и красивый интерфейса. Найти подробный гайд для новичков и интегрировать разные сложные компоненты (аутентификацию, базу данных, кэширование) — это распространенная и большая проблема.
Flask и Tornado немного проще, чем Django, но у них нет понятной и подробной документации. Про Tornado вообще очень мало материала. Материалов про Django, наоборот, очень много, а вопрос интеграции в нем решается путем внесением правок в конфигурационный файл. Чтобы выполнить сложную интеграцию на Flask или Tornado, нужно писать достаточно много кода. Это не простая задача и в ней новички часто ошибаются.
Новичкам можно начинать с Flask — это самый простой Python-фреймворк на сегодня, который подходит только для простых приложений. Но это не значит, что он плох. На его примере можно изучить и понять жизненный цикл вопросов-ответов, которые проходят request и response. Также, с его помощью масштабировать простые приложения легче, чем в Django. Tornado стоит использовать, если ваше приложение использует WebSocket или серверную часть NoSQL. Он тоже достаточно минималистичен, но в свою очередь, более узконаправленный, чем те же Flask или Django.
Как только вы дойдете до интеграции сложных компонентов или начнете разрабатывать многостраничные веб-приложения, лучше перейти на уже на Django. В нем есть определенный порог сложности, но он одноразовый — нужно разобраться со связями между компонентами и все. Однако при работе с большими и сложными веб-приложениями в Django пропадают все вопросы по интеграции. Кроме того, при правильном обращении Django может выглядеть также просто, как Flask.
Если говорить о сообществах, то, помимо документации и туториалов, на тему Django есть различные подкасты, рассылки, конференции. У Flask и Tornado сообщества намного меньше — в том числе потому, что они больше подходят для небольших проектов. Для новичков сообщества будут играть весомую роль.
Производительность
Производительность фреймворков часто оценивается количеством «Hello world в секунду»: например, так можно проверить количество соединений, которые сервис может держать одновременно, или скорость ответов. Это чисто теоретические измерения, которые никак не отражают реальную производительность.
Код на Python относительно медленный и потребляет много ресурсов — производительности уровня Rust в этом языке добиться не получится. (в следующей статье сравним Rust и Python) Как говорилось выше, этот показатель на Python определяется скоростью написания кода, Иными словами, хоть Python и медленнее некоторых языков программирования, но этот параметр нивелируется высокой скоростью написания кода. Поэтому рассмотрим наши фреймворки с этой точки зрения.
Благодаря легкой интеграции, а также большому выбору библиотек и компонентов, Django с большим отрывом опережает Flask и Tornado. В Flask и Tornado решения костыльные, собирать их нужно по отдельным элементам, что значительно увеличивает время работы над сервисом.
Гибкость
Исходя из определения, фреймворк — это набор рамок (фреймов), которые предлагают определенный способ выполнить определенное действие. Поэтому в случае с фреймворком гибкость — скорее будет недостатком, нежели преимуществом.
Во Flask гибкость сравнительно высокая: например, он дает возможность создавать и использовать глобальные объекты, а также контекст треда для сложения промежуточных объектов. Django наименее гибкий из трех, а Tornado находится где-то посередине между ними. В пользу Django говорит и то, что все приложения на этом фреймворке получаются одинаковыми, а на Flask — сильно отличаются друг от друга. И это действительно плюс. Вас ночью подними и вы скажите, какая структура у приложений и как она строится.
Асинхронность
Python и его библиотеки изначально не предназначались для асинхронного программирования, поэтому использование async/await создает дополнительные проблемы при написании кода. Эти функции недостаточно легко добавить в код — их нужно правильно написать. Для это требуется дополнительное время, что снижает производительность.
В Django есть инструмент, который позволяет сделать код асинхронным при смене класса воркера jUnicorn на jevent. В зависимости от ситуации такой подход позволяет выиграть в производительности от 10% до 100% по сравнению с использованием async/await.
Заключение
Выбирать фреймворк следует исходя из характеристик проекта, который вы разрабатываете:
- Если проект большой и требует интеграций сложных компонентов, стоит выбрать Django.
- Для небольших проектов, обучения или приложений с веб-сокетами и NoSQL больше подойдут Flask и Tornado.
#python #pythonснуля #python3 #программированиенаpython #урокиpython #web-разработка #программированиенаpython #django #flask #веб-разработка