Конструктор веб приложений python

Обновлено: 18.05.2024

Dash — библиотека для языка Python с открытым исходным кодом, предназначенная для создания реактивных веб-приложений. Она была загружена на GitHub два года назад в тестовом режиме. Команда разработчиков Dash решила оставить этот прототип в сети, однако продолжила вести работу над проектом уже вне платформы GitHub. Благодаря обратной связи от банков и лабораторий, а также от команд, работающих с анализом данных, разработчики определили курс развития библиотеки. Сегодня уже представлена первая публичная версия Dash, которая подходит как для корпоративных клиентов, так для клиентов премиум-класса продукции Plotly. Библиотека может быть использована как с Plotly, так и самостоятельно.

Создание веб-приложений на Python с помощью Dash

В настоящее время Dash можно загрузить, используя диспетчер пакетов Python, с помощью команды pip install dash . Dash распространяется с открытым исходным кодом и под лицензией MIT. На официальном сайте вы сможете ознакомиться с руководством по библиотеке, и на GitHub вы найдёте исходный код.

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

Dash значительно упрощает создание GUI (графических пользовательских интерфейсов) для анализа данных. Вот пример приложения на Dash из 43 строк кода, который связывает выпадающее меню с графиком D3.js. Когда пользователь выбирает значение в выпадающем списке, код динамически экспортирует данные из Google Finance в Pandas DataFrame:

Код Dash является декларативным и реактивным, что упрощает создание сложных приложений, содержащих множество интерактивных элементов. Вот пример с 5 входными данными, 3 — выходными и с перекрёстной фильтрацией. Это приложение было написано на Python, и в нём всего лишь 160 строк кода:

Приложение на Dash с несколькими входными и выходными данным.

Для каждого элемента приложения можно задать собственные параметры размера, расположения, цвета и шрифта. Приложения на Dash создаются и публикуются в Сети, поэтому к ним можно применить всё, на что способен CSS. Ниже иллюстрируется пример тонко настраиваемого интерактивного приложения отчётности на Dash, выполненного в стиле отчёта финансовой организации Goldman Sachs.

Тонко настраиваемое приложение Dash, созданное в стиле отчёта финансовой организации Goldman Sachs.

Вам не нужно писать какой-либо код на JavaScript или HTML, когда ваше приложение на Dash запущено в веб-браузере. Dash предоставляет богатый набор интерактивных веб-компонентов.


Пример простого ползунка на Dash

Dash предоставляет простой реактивный декоратор для привязки вашего кода анализа данных к пользовательскому интерфейсу Dash.

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

Ваша функция Python может выполнять различные действия с новым входным значением: может фильтровать объект DataFrame библиотеки Pandas, выполнять SQL-запрос, запускать симуляцию, выполнять вычисления или запускать тестирование. Dash рассчитывает, что ваша функция вернёт новое свойство для какого-нибудь элемента пользовательского интерфейса, будь то новый график, новая таблица или новый текст.

В качестве примера ниже представлено приложение на Dash, которое обновляет текстовый элемент при взаимодействии с графиком. Код приложения фильтрует данные в Pandas DataFrame на основе выбранной точки:

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

Благодаря этим двум разделениям между компонентами Python и реактивными функциональными декораторами, Dash разграничивает все технологии и протоколы, необходимые для создания интерактивного веб-приложения. Dash достаточно прост, чтобы привязать пользовательский интерфейс к коду Python за один вечер.

Архитектура

Flask и React.js

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

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

Dash использует мощь Flask и React, подстраивая их под работу с Python для специалистов по анализу и обработке данных, которые могут не быть экспертами в области веб-разработки.

От React.js к компонентам Python

Компоненты Dash — это классы Python, которые кодируют свойства и значения конкретного компонента React и упорядочиваются как JSON. Dash предоставляет набор инструментов для лёгкой упаковки компонентов React в вид компонентов, которые могут быть использованы в Dash. Этот набор инструментов использует динамическое программирования для автоматического создания классов Python из аннотированного свойства React — propTypes . На выходе классы Python, которые представляют компоненты Dash, являются удобными для пользователя, так как они имеют автоматическую проверку аргументов, строк документации и прочее.

Вот пример динамически сгенерированной проверки ошибочного аргумента:

Пример динамически создаваемых строк документации:

Полный набор HTML-тегов (наподобие div , img , table ) также обрабатывается с помощью React, а их классы Python доступны через библиотеку dash_html_component . Основной набор интерактивных компонентов, таких как Dropdown , Graph , Slider , будет поддерживаться командой Dash через dash_core_components . Обе библиотеки используют стандартный набор инструментальных средств React-to-Dash с открытым исходным кодом, который вы могли бы использовать при необходимости написания своей собственной библиотеки компонентов.

Ваше приложение автоматически не привязывается к библиотеке компонентов Dash. Библиотека компонентов импортируется отдельно от основной библиотеки Dash. С помощью набора инструментальных средств React-to-Dash можно легко записать или перенести компонент React.js в класс Python, который можно использовать в приложении Dash. На официальном сайте вы найдёте руководство по созданию собственных компонентов или можете попросить команду разработчиков Dash написать их для вас.

Многопользовательские приложения

Свойства приложения на Dash хранятся в интерфейсе (в браузере). Это позволяет использовать приложения, написанные с использованием Dash, в многопользовательском режиме: может быть открыто несколько независимых друг от друга сессий, в которых действия одних пользователей не будут влиять на данные других пользователей. Код приложения на Dash является функциональным: он может считывать значения из глобальных свойств Python, но не может вносить в них изменения. Этот функциональный подход можно легко обосновать и протестировать — это просто входные и выходные данные без каких-либо побочных эффектов или свойств.

CSS и стили

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

Визуализация данных

Библиотека Dash поставляется с компонентом Graph, который отвечает за отображение диаграмм с помощью Plotly.js. Библиотека Plotly.js отлично подходит к Dash (отличное дополнение), так как она декларативна и имеет открытый исходный код. Кроме того, она поддерживает полный спектр научных, финансовых и деловых диаграмм. Она создана на основе D3.js (для диаграмм типографического качества и экспорта векторных изображений) и WebGL (для высокопроизводительной визуализации).

В библиотеке Dash элемент Graph использует тот же синтаксис, что и библиотека Plotly.py с открытым исходным кодом, что даёт вам возможность легко переключаться между ними. Компонент Graph подключается к системе событий Plotly.js, позволяя авторам писать приложения, которые реагируют на наведение курсора, щелчки и выбор определённых точек на графиках Plotly.


Репозитории с открытым исходным кодом

    ; ; ; ; ; и руководство по Dash; —JavaScript- библиотека, используемая Dash.

Прототипирование

Dash — это новая библиотека в среде Python, однако концепции и идеи, на которых строится Dash, существуют в течение десятилетий на разных языках и в разных приложениях.

Если вы разбираетесь в Excel, значит, вам будет проще разобраться и в Dash. Ведь они оба используют «реактивную» модель программирования. В Excel ячейки с выходными данными обновляются автоматически при изменении параметров ячеек с входными данными. Любая ячейка может быть входной или выходной или и тем, и другим. В ячейках с входными данными нет информации о том, какие ячейки с выходными данными зависят от них, что упрощает добавление новых ячеек с выходными данными или позволяет связать несколько ячеек. Вот пример Excel-приложения:

Можно провести аналогию для Dash. Вместо ячеек у нас есть богатый спектр веб-компонентов, таких как ползунки, поля ввода, выпадающие списки и графики. Вместо написания сценария Excel или VBA мы пишем код Python. Ниже представлено то же самое приложение, но в этот раз оно написано на Dash:

Некоторым разработчикам нравится этот пример, потому что Excel по-прежнему занимает доминирующее положение даже в технических вычислениях и в финансовой математике. Я не думаю, что доминирующее положение Excel — это технический вопрос. В конце концов, есть легионы программистов, которые изучили нюансы Excel, VBA и даже SQL.

Более того, таблицы Excel легче распространять, чем программы на Python, а ячейки Excel легче редактировать, чем аргументы командной строки.

Тем не менее, моделирование в Excel имеет известные ограничения: эти таблицы часто становятся слишком большими или уязвимыми, чтобы переводить их на производственный уровень, проводить экспертную оценку или тестировать и поддерживать. Вам ведь знаком случай со знаменитой опечаткой в 2013 году?

Надеемся, что Dash сделает использование Python в проектах по обработке данных проще. Благодаря одним и тем же функциональным и реактивным принципам, можно так же легко написать приложение на Dash, как написать аналитическую таблицу. Это, безусловно, более мощный и презентабельный инструмент.

Фреймворк Shiny

Если вы программируете на R, вам повезло. Shiny — это реактивный фреймворк для создания веб-приложений на чистом R, и это отлично! Вы даже можете создавать интерактивные графики с библиотекой Shiny или Plotly для R. Dash и Shiny похожи, но Dash не стремится быть копией Shiny, так как философии Python и R достаточно различаются, что приводит к необходимости использования разного синтаксиса.

Интерактивное веб-приложение, созданное с помощью Shiny на языке R.

Структурирование данных с MATLAB

Если вы программируете на MATLAB, то вам, возможно, знакома GUIDE — библиотека пользовательского интерфейса для MATLAB. Компания Mathworks была одной из новаторов в области технических вычислений. GUIDE была написана в далёком 2004 году.


Приложение, созданное с помощью библиотеки GUIDE на MATLAB.

Если ваши данные структурированы в базе данных, вы могли бы использовать Tableau или любой другой BI-инструмент. Tableau — восхитительный инструмент. Компания установила новый вектор развития в своей отрасли, согласно которому, у конечного пользователя должна быть автономия, чтобы он мог иметь возможность исследовать данные внутри своей организации. Компания также помогла сделать популярнее концепции детализации данных и перекрёстной фильтрации.

Перекрёстная фильтрация в Tableau.

Dash также служит дополнением к BI-инструментам, наподобие вышеупомянутых. Они отлично подходят для структурирования данных. Но когда дело доходит до преобразования данных и аналитики, превзойти размах и гибкость языков программирования и сообществ, вроде Python, становится труднее. Dash абстрагируется от множества сложностей в создании пользовательских интерфейсов, позволяя вам сделать это красиво для вашей аналитической базы данных.

Виджеты Jupyter

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

Виджеты в Dash похожи на виджеты Jupyter. В Jupyter Notebooks есть возможность добавлять виджеты непосредственно рядом с кодом. В Dash элементы управления хранятся отдельно от вашего кода. Dash больше нацелена на приложения для распространения, чем на распространяемый код и документацию. Вы всегда можете смешивать и сопоставлять инструменты, создавая свои приложения на Dash в среде Jupyter Notebook.

Команде разработчиков Dash также очень нравится проект nteract, который действительно снижает порог вхождения в Python и Jupyter Notebook, позволяя упаковать Jupyter Notebook в виде настольного приложения.

Лицензирование и бизнес-модель с открытым исходным кодом

Стартап поддерживает библиотеки с открытым исходным кодом для Python, R и MATLAB, которые взаимодействуют с plotly.js. Компания также поддерживает веб-приложение для создания диаграмм и подключения их к базам данных (стыковочные библиотеки также распространяются с открытым исходным кодом).

Если вы используете локальную версию с открытым исходным кодом, в таком случае ограничений нет. Вы можете управлять развёртыванием Dash-приложений самостоятельно через платформы вроде Heroku или Digital Ocean.

Если вы ищите вдохновение для создания своих пользовательских интерфейсов в области технических вычислений, рекомендуем прочитать статью Брета Виктора

Вам также может понравиться проект Explorable Explanations, который специализируется на интерактивном обучении.


В 2018 году Python укрепил свои позиции популярности среди программистов и вошел в Top 3 самых популярных языков на github. Все больше и больше людей переходит на светлую сторону…то есть Python. Появилось еще большее количество разработчиков, которые интересуются данным языком и ведут разработку своих проектов с его помощью. Одним из популярных направлений для Python является web-разработка. Хочется, чтобы не только процесс разработки был удобным и быстрым, но и сами проекты могли похвастаться скоростью и стабильностью работы.

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

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

Участники тестирования

Django


Версия: 2.1.4
Описание: самый популярный комбайн для Python, который из коробки решает множество проблем (админка, авторизация, логирование, ORM, и т.д). Это упрощает жизнь разработчика, но если мы ставим в приоритет скорость работы — то иногда такой комбайн играет против нас и это сказывается на производительности. По этой причине номинацию Fastest Python Web Framework in 2019 он скорее всего не возьмет.

Flask


Версия: 1.0.2
Описание: самый популярный фреймворк на Python (по звездам в GitHub обгоняет даже Django). Популярный выбор в случаях разработки мелких проектов, для которых не нужны те плюшки, которые есть в Django. Позволяет быстро развернуть приложение. Возможно быстрее чем Django по скорости работы, но имеет очень маленькую функциональность “из коробки”.


Версия: 3.5.1
Описание: очень привлекательный асинхронный Python Framework. Имеет версию клиента и сервера, что значительно развязывает руки при разработке. Обладает очень удобными асинхронными запросами с версии клиента, а также очень хорошие показатели скорости работы сервера при большом количество запросов. Точно должен попасть в тройку лидеров.

Sanic


Версия: 18.12
Описание: можно сказать, что это “многопоточный Flask” со всеми вытекающими. По этой причине мы думаем, что результаты должны быть очень хороши.

Tornado


Версия: 5.1.1
Описание: асинхронный ветеран Python движения, задавший тренд асинхронности в 2010 году. Не теряет своей актуальности и получил 5ю версию в 2018 году. Достаточно высокий порог входа для новичков. Популярен среди олдскульных питонистов, и мы думаем не зря. Должен показать хорошие результаты.

Vibora


Тестируемая версия: релизов на GitHub нет
Описание: многообещающий фреймворк, появившийся в июне 2018 и за последнии полгода набравший более 4000 звезд. Имеет впечатляющие замеры производительности в GitHub. Мы думали именно Vibora станет фаворитом нашей гонки, но к сожалению из-за отсутствия возможности запуска под Python >=3.7 и отсутствия стабильной версии фреймворка мы исключили Vibora.

В GitHub разработчики обещают “кардинально новый” Vibora уже скоро. Посмотрим, что у них получится и обязательно напишем об этом.

Методика тестирования

Тестирование проводилось на Apple iMac 27'' Retina 5K 2017, CPU: 3.5GHz i5, RAM: 8GB, 1000GB Fusion Drive, OSX 10.14.2 при помощи утилиты WRK:


Тесты проводились на Python 3.7.2. Все фреймворки запускались при помощи Gunicorn с двумя воркерами. Возможно в каких-то случаях использование uwsgi сказалось бы на результатах, но так как мы поставили цель тестировать фреймворки, а не способы их запуска — решили этим пренебречь.

У нас был всего один вид тестов: DB Test, в котором мы получаем строковые данные из базы данных и возвращаем их в виде html-ответа (1 запись в 79 bytes). В качестве базы данных использовался Postgres 11. В качестве драйвера обращений к базе использовался psycopg2 в случае синхронных фреймворков и asyncpg в случае асинхронных.

В качестве event loop библиотеки для асинхронных фреймворков решили использовать uvloop.

Результаты

Запросов в секунду

Передача данных в секунду (Кб)



По количеству переданных данных в секунду Django сильно отстает.

Среднее время запроса (мс)



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

Максимальное время запроса (сек)



Все “подопытные” показали практически одинаковые результаты по максимальному времени запроса. Все, как мы и ожидали.

Финальные результаты

Итоги

Sanic: популярность фреймворка идет впереди его производительности. Чуда не случилось и обогнать лидера не вышло. В совокупности с тредом на Reddit о проблемах c безопасностью — мы бы не стали использовать Sanic прямо сейчас и подождали действий от разработчиков.

Tornado: “разочарование года”. В связи с результатами — не думаем, что Tornado стоит выбирать для реализации каких-либо новых проектов. Надеемся разработчики что-нибудь придумают и исправят ситуацию.

Django показал ожидаемый результат. Мы любим Django за его возможности и избавление нас от рутины, а не за скорость работы. Обширное community, большое количество материалов в Сети, большое количество реализованных проектов в открытом доступе — все это делает его привлекательным для новичков. Если бы у нас стояла задача быстро разработать MVP типичного web-сервиса — мы бы выбрали в 2019 именно его.

Flask тоже показал ожидаемый результат. Обошел Django за счет того, что имеет не такой богатый функционал из коробки. Не дотянул до скорости асинхронных фреймворков. Мы бы выбрали его в 2019 для реализации небольших pet-проектов или тогда, когда уже важна скорость, но разбираться с асинхронными фреймворками желания еще нет.

Все исходные файлы бенчмарков вы можете посмотреть в репозитории Python Frameworks Benchmark.

image

От переводчика: сегодня мы предлагаем вам перевод статьи, размещенной на Hackernoon компанией SteelKiwi. Она занимается разработкой программных решений b2b и b2c, а опытом, накопленным в процессе работы, делится с читателями своего блога.

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

Skillbox рекомендует: Практический курс «Python-разработчик с нуля».
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».

В этой статье рассказывается о десяти фреймворках Python, которые будут полезны как для начинающих разработчиков, так и для профессионалов. В 2018 году старые фреймворки обновились, появились и новые инструменты, на которые стоит обратить внимание.

Прежде чем начать…

Когда вы начинаете выбирать фреймворк, оцените размер и сложность своего проекта. Если то, что вы разрабатываете, представляет собой большую систему с изрядным количеством функций, то full-stack фреймворк — то, что вам нужно. Если же вы создаете относительно небольшое приложение или сервис, тогда стоит обратить внимание на микрофреймворки.

Информация о некоторых фреймворках изложена на страницах «Википедии». Финальное решение, однако, вы должны принимать сами на основе уже озвученных выше принципов анализа собственного сервиса или приложения.

Full-stack фреймворки


Django — свободный open-source full-stack фреймворк. Он позволяет добавить большинство стандартных функций единым пакетом вместо поиска отдельных библиотек.

Среди них — такие востребованные, как аутентификация, URL-маршрутизация, миграция схемы данных и т.п.

Django использует ORM для сопоставления объектов с таблицами баз данных. Один и тот же код работает с разными базами данных, так что переход из одной БД в другую становится простой задачей. Основными базами, с которыми работает Django, являются PostgreSQL, MySQL, SQLite и Oracle. Можно добавить и другие, но для этого понадобятся решения сторонних разработчиков.


Pyramid — open-source фреймворк, который дает максимум возможностей разработчику с минимальными затратами времени и ресурсов.

Наиболее интересная возможность фреймворка — работа как с большими, так и с малыми приложениями. Отдельно стоит выделить такие функции Pyramid, как:

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


TurboGears — open-source full-stack фреймворк для веб-приложений. Он позволяет разработчику быстро создавать расширяемые веб-приложения, управляемые данными. TurboGears поставляется с удобными шаблонами и мощным и гибким ORM.

Наиболее важные функции фреймворка:

  • поддержка различных баз данных;
  • поддержка SQLObject и SQLAlchemy;
  • валидация для FormEncode;
  • Pylons как веб-сервер;
  • инструменты командной строки.


А это — масштабируемый open-source full-stack фреймворк для Python. Но прежде чем начать с ним работать, стоит запомнить, что с Python 3 он несовместим.

Зато Web2py поставляется с собственным IDEwhich: в нем есть редактор кода, дебаггер и деплой в один клик. Среди прочих функций и инструментов стоит выделить следующие:

  • отсутствие необходимости в установке и настройке;
  • работа в среде Windows, Mac, Google App Engine, Amazon EC2 и на любом хостинге, который поддерживает Python 2.5–2.7 или Java+Python;
  • работа с различными протоколами;
  • высокий уровень безопасности данных;
  • трекер ошибок;
  • обратная совместимость, которая позволяет без труда работать с приложениями и сервисами на основе прежних версий фреймворка.

Микрофреймворки


Это микрофреймворк, который предоставляется по лицензии BSD. Его разработчики вдохновлялись фреймворком Sinatra Ruby. Он зависит от инструментария Werkzeug WSGI и шаблона Jinja2.

У Flask модульный дизайн, который позволяет адаптировать его для выполнения многих задач. «Из коробки» разработчик получает следующие функции:

  • встроенный сервер и дебаггер;
  • шаблоны Jinja2;
  • поддержка безопасных кукис;
  • WSGI 1.0;
  • Unicode;
  • возможность подключения к любой ORM.


Еще один микрофреймворк, который изначально предназначался для создания API. Bottle отличает наличие единственного source-файла. Работа с ним не требует «танцев с бубном».

Его функции по умолчанию включают в себя маршрутизацию, шаблоны, утилиты и базовую абстракцию по стандарту WSGI:


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

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

Его отличительные способности:

Асинхронные фреймворки

Он работает на Python 3.5+. Sanic поддерживает асинхронные обработчики запросов, что делает его совместимым с функциями async / wait Python 3.5. Это значительно повышает скорость работы.

В бенчмарке при обработке 100 соединений Sanic показал способность обрабатывать 33 342 запроса в секунду.


Tornado — это веб-фреймворк Python и асинхронная сетевая библиотека одновременно. Он использует неблокирующий сетевой ввод-вывод и решает проблему C10k (это означает, что при правильной настройке он может обрабатывать 10 000+ одновременных подключений).

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

Бонус


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

Приложения, разработанные с помощью Dash, отображаются в веб-браузере и могут быть развернуты на серверах. Приложения Dash являются по своей сути кроссплатформенными.

В качестве вывода можно сказать, что фреймворков разработчикам предлагается действительно много. Каждый из них дает собственные уникальные возможности. Но выбор фреймворка — важное решение для будущего собственного проекта, и спешить с этим не следует.

Python — это объектно-ориентированный, интерпретируемый и интерактивный язык программирования. Лёгкость в его изучении и простота восприятия покорили многих разработчиков. Это один из самых быстроразвивающихся языков. Согласно индексу популярности языков программирования, Python занимает лидирующую позицию среди наиболее используемых языков в мире. Это означает, что спрос на Python-разработчиков в ближайшее время не снизится.

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

Многие современные технологические компании, такие как Google, Netflix, Яндекс, выбирают Python-фреймворки для веб-разработки. И им есть из чего выбрать.

Django

Фреймворки django

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

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

Ключевые особенности Django:

  • наличие собственного ORM (от англ. Object-Relational Mapping, «объектно- реляционное отображение»);
  • встроенный административный интерфейс (простым языком — админка);
  • шаблонизатор;
  • библиотека работы с формами;
  • система кэширования и интернализации;
  • система авторизации и аутентификации.

CherryPy

Фреймворк CherryPy

Фреймворк CherryPy, которому уже более десяти лет, зарекомендовал себя как исключительно быстрый и стабильный продукт. Одна из изначальных целей основателя проекта Реми Делона — сделать CherryPy максимально соответствующим принципу «pythonic style». Это позволило разработчикам использовать этот фреймворк как обычный модуль Python и не думать об особенностях веб- программирования. Они могут создавать веб-приложения практически так же, как создают любую другую объектно-ориентированную программу на Python.

CherryPy может выступать в качестве самостоятельного веб-сервера или работать под управлением другого серверного приложения.

Ключевые особенности CherryPy:

Pyramid

Фреймворк Pyramid

Набирающий популярность фреймворк Pyramid универсален. Его можно использовать для проектов любого уровня сложности. Он заслужил высокие оценки в среде Python-разработчиков благодаря своей прозрачности и проверенной временем надёжности. Его используют такие технологические гиганты, как Mozilla, Yelp, Dropbox и SurveyMonkey.

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

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

В обоих случаях основное внимание уделяется началу работы над проектом: либо всего слишком много, либо слишком мало. Pyramid — это золотая середина. Этот фреймворк в самом начале работы над проектом может быть микрофреймворком, а по мере роста даст всё необходимое на каждом этапе, чтобы довести проект до успешного завершения.

Ключевые особенности Pyramid:

TurboGears

Фреймворк TurboGears

TurboGears — это ещё один веб-фреймворк для разработки веб-приложений, написанный на языке Python. Во время его создания вдохновение черпалось из опыта использования Django и Rails. Эти фреймворки имеют ряд ограничений и недостатков, а TurboGears попытался решить эти проблемы.

Основное отличие этого фреймворка от того же Django — не изобретение велосипеда в виде собственной ORM, а использование в качестве основных компонент стандартных и популярных библиотек, таких как Pylons, SQLAlchemy, Genshi и Repoze.

Среди организаций, которые использовали TurboGears, — Bisque, ShowMeDo и SourceForge.

Ключевые особенности TurboGears:

  • поддержка множества баз данных;
  • поддержка различных JavaScript-библиотек;
  • поддержка множества форматов обмена данными;
  • поддержка горизонтального масштабирования данных по примеру шардинга;
  • возможность расширения средствами стандартных WSGI-компонент.

Web2Py

Фреймворк по веб-разработке на Python Web2Py

Фреймворк Web2py изначально задумывался как учебный инструмент с акцентом на юзабилити и простоте начала использования. Например, в нём отсутствуют файлы конфигурации проекта. Сама же архитектура фреймворка разработана по аналогии с такими решениями, как Ruby on Rails и Django.

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

Кроме того, каждое приложение обеспечено автоматически сгенерированным интерфейсом администрирования по типу Django.

Ключевые особенности Web2py:

  • интегрированная веб-среда разработки;
  • встроенные компоненты для всех основных функций;
  • механизмы аутентификации и контроля доступа по ролям;
  • поддержка jQuery для Ajax- и UI-эффектов;
  • поддержка интернационализации;
  • автоматическое журналирование ошибок вместе с контекстом.

Flask

Фреймворк Flask

У фреймворка Flask небольшой размер исходной кодовой базы, поэтому его называют микрофреймворком. Но это не значит, что у него меньше возможностей, чем у того же Django. По умолчанию он включает в себя только обработчик запросов и шаблонизатор, а простейшее приложение на Flask может состоять всего из нескольких строк. Разработчики этого фреймворка осознанно хотели сохранить ядро простым, но расширяемым.

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

Flask лежит в основе таких крупных сервисов? как Reddit, Netflix, Pinterest, Twilio и агрегатора такси Lyft.

Ключевые особенности Flask:

  • встроенный сервер разработки и отладчик;
  • диспетчеризация запросов в RESTful-стиле;
  • встроенная поддержка модульного тестирования;
  • использование шаблонизатора Jinja2;
  • 100%-ная совместимость с WSGI 1.0;
  • множество расширений, предоставляемых сообществом.

Bottle

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

Функциональные возможности «из коробки» включают встроенный веб-сервер, шаблонизацию, роутинг запросов, а также собственные инструменты и утилиты. Bottle позволяет создавать простые приложения для личного пользования. А ещё это подходящий пример для изучения фреймворков, а также для быстрого создания прототипов. Например, компания Netflix использовала Bottle для создания своих веб-интерфейсов.

Ключевые особенности Bottle:

Tornado

Tornado — это расширяемый асинхронный веб-сервер и фреймворк, который решает проблему C10k. То есть при правильной настройке он может работать с 10 000+ одновременных соединений. Это делает его отличным инструментом для создания приложений, требующих суперпроизводительности при работе с операциями ввода/вывода и поддержки огромного количества одновременных соединений.

Изначально фреймворк был создан для использования в проекте FriendFeed, который в 2009 году приобрела компания Facebook, после чего исходные коды Tornado были открыты.

Ключевые особенности Tornado:

  • асинхронный режим работы;
  • использование веб-сокетов;
  • поддержка схем аутентификации и авторизации сторонних производителей.

web.py

Фреймворк web.py

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

Web.py делает процесс веб-разработки максимально непредвзятым и не встаёт на пути идей разработчиков. Причина упрощения процесса разработки в том, что бывают случаи, когда нет необходимости использовать паттерн проектирования MVC или создавать беспорядок из HTML, CSS, JavaScript и PHP в одном файле.

Ключевые особенности Web.py:

  • встроенный веб-сервер разработки;
  • встроенный отладчик;
  • встроенный шаблонизатор;
  • встроенный пакет работы с базами данных;
  • пакет работы с формами;
  • совместимость с WSGI.

FastAPI

FastAPI — это асинхронный веб-фреймворк, который появился на свет в конце 2018 года. Он предназначен для быстрой разработки API-приложений и основан на использовании стандартной аннотации типов Python.

Слово «fast» в названии указывает не только на быструю разработку приложения, но и на производительность фреймворка. Как утверждает документация, согласно результатам независимых тестов, FastAPI по скорости не уступает приложениям, написанным на NodeJS или Go, а также это один из самых быстрых фреймворков на Python.

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

FastAPI обычно применяется для разработки API, без фронтенда, но при желании его можно дополнить стандартными шаблонами на основе шаблонизатора, например Jinja2, который применяется во Flask.

Ключевые особенности FastAPI:

  • очень высокая производительность, наравне с NodeJS и Go;
  • встроенная документация на основе Swagger;
  • использование веб-сокетов;
  • лёгкая интеграция с базами данных;
  • основан на стандартах OpenAPI и полностью совместим с ними.

Что же выбрать?

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

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

На курсе «Python-разработчик плюс» в Яндекс Практикуме вы изучите основы трёх востребованных на рынке фреймворков — Django, Flask и FastAPI и создадите несколько проектов с их использованием.

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

Такие фреймворки относятся к категории full stack. Они крутые, в них куча инструментов и всё включено, но это может сделать их тяжёлыми, медленными и негибкими. Кроме фулстек-фреймворков есть и другие, например микро- или асинхронные фреймворки.

Фулстек-фреймворки. Есть всё необходимое для создания приложения — архитектура MVC (Model-View-Controller), имплементация ORM, движок шаблонов, маршрутизация и всё остальное. Такие фреймворки годятся для любых задач, но для мелких проектов можно обойтись и чем-нибудь менее громоздким.

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

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

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

Django

Высокоуровневый фреймворк, предназначенный для быстрой и эффективной разработки. Его архитектура выстроена так, чтобы максимально экономить ваше время и силы, а в будущем — время и деньги заказчиков. Основные принципы философии Django — DRY и rapid development — стимулируют переиспользование кода и уменьшают избыточность.

  • Контроль версий для баз данных (миграции).
  • Собственный движок шаблонов.
  • Объектно-реляционные отображения (ORM).
  • Маршрутизация URL.
  • Поддержка веб-серверов.
  • Поддержка аутентификации.
  • Поддержка интернационализации.

Плюсы

  • Масса библиотек. Базовую функциональность не нужно писать самому — многое уже написано, остаётся только импортировать соответствующие библиотеки. На качество библиотек Django обычно можно положиться.
  • Сообщество и документация. У Django подробная документация и дружелюбное сообщество, поэтому всегда можно разобраться, что как работает, или спросить у специалистов.
  • Масштабируемость. Если вы понятия не имеете, насколько сильно ваш проект вырастет и вырастет ли вообще (как это обычно и бывает со стартапами), Django позволяет начать с малого и масштабироваться по мере необходимости.

Минусы

  • Django из коробки не поддерживает WebSockets, поэтому он плохо подходит для работы в реальном времени.
  • Готовые библиотеки — это в целом хорошо, но часто они снижают гибкость.

Где используется?

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

Django — один из самых популярных фреймворков, многие веб-студии работают именно с ним, поэтому важно уметь его использовать, если вы собираетесь работать в сфере веб-технологий. Изучить его, а также другие необходимые веб-разработчику инструменты, можно на курсе SkillFactory.

Pyramid

Если хочется что-то более минималистичное, то вам может прийтись по вкусу Pyramid. Этот фреймворк подходит для проектов любого размера. В нём есть полезные фичи для создания сложных приложений или масштабирования изначально небольших сайтов под возросшую нагрузку.

  • Удобные инструменты для работы со статичными ассетами.
  • Предикаты и рендереры.
  • Генерация URL.

Плюсы

  • Гибкость и удобство кастомизации. Любой компонент фреймворка, будь то база данных или движок шаблонов, может быть заменён. Можно даже использовать несколько разных компонентов одновременно (например, подключить две разные базы данных).
  • Удобные Ajax-запросы. Благодаря системе декораторов и представлений можно отправлять XHR-запросы без дополнительных усилий со стороны разработчика.
  • Поддержка SQLAlchemy. SQLAlchemy обеспечивает удобную работу с базами данных даже для сложных запросов.

Минусы

  • Требует времени на развёртывание и подготовку к разработке.
  • Чтобы заниматься кастомизацией, надо хорошо разбираться в Pyramid.
  • Для простых приложений SQLAlchemy может быть чересчур громоздкой.

Где используется?

    — онлайновый редактор графиков для неспециалистов. — хостинг-провайдер. — среда разработки веб-приложений.

TurboGears

TurboGears — опенсорсный фреймворк для быстрой разработки приложений, работающих с данными. Он поддерживает SQLAlchemy, Genshi, WebOb, and Repoze, так что TurboGears прекрасно подходит для любой системы, требующей хорошей поддержки баз данных.

  • Поддержка горизонтального секционирования данных.
  • Интеграция с джаваскриптовой библиотекой MochiKit.
  • Поддержка нескольких баз данных одновременно.
  • Поддержка архитектуры MVC.
  • ToscaWidgets.
  • Шаблоны PasteScript.
  • Валидация через FormEncode.

Плюсы

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

Минусы

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

Где используется?

    — онлайн-платформа для управления репозиториями кода, созданная SourceForge.
  • Kamisons — сайт по продаже зонтов.

Flask

Flask — это WSGI-фреймворк, который подходит и для простых сайтов, и для сложных платформ. Он совместим со сторонними библиотеками и имеет множество расширений.

  • Быстрый встроенный дебаггер.
  • Встроенный dev-сервер.
  • Шаблоны Jinja2.
  • Поддержка REST-запросов.
  • Совместим с любой ORM.
  • Безопасные куки для управления сессией на клиенте.
  • Поддержка юнит-тестов.
  • Соответствует WSGI 1.0.

Плюсы

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

Минусы

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

Где используется?

    —онлайн-платформа для управления личными финансами. — одна из крупнейших стриминговых платформ в мире. — платформа для заказа такси и аренды транспорта.

Tornado

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

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

Где используется?

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

Python и его фреймворки — только часть необходимых знаний веб-разработчика. Нужно ещё уметь работать с HTML, CSS, SQL и другими инструментами. Обо всем этом расскажут на курсе SkillFactory, после которого у вас будет базовый набор знаний и умений, чтобы начать работать веб-разработчиком.

Читайте также: