image

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

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

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

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

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


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

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

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


Django



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

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

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

Pyramid



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

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


TurboGears



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

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

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

Web2py



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

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

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

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


Flask



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

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

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

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

Bottle



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

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

  • маршрутизация поддерживает запросы на отображение функциональных вызовов, позволяя вам получать чистые и динамические URL-адреса.
  • шаблоны — много нужных инструментов, работающих «из коробки» вместе с полной поддержкой mako, jinja2 и cheetah.
  • утилиты — удобный доступ к данным, загрузка файлов, куки, заголовки и другие метаданные, связанные с HTTP.
  • встроенный сервер разработки HTTP, который поддерживает функции fapws3, bjoern, GAE, CherryPy и любой другой HTTP-сервер с WSGI.

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

CherryPy



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

По факту это веб-приложение, работающее под управлением CherryPy, является автономным приложением Python, использующее собственный многопоточный веб-сервер. Приложения CherryPy запускаются в любой операционной системе, поддерживающей Python (Windows, MacOS, Linux и т.д.). Они могут быть развернуты в любом окружении, где вы можете запускать обычное приложение Python. Вам не требуется Apache для приложений CherryPy, вы можете запустить приложение CherryPy в Apache, так же как в Lighttpd или IIS.

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

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

  • простой запуск нескольких HTTP-серверов одновременно;
  • мощная конфигурационная система;
  • гибкая система плагинов;
  • возможности «из коробки»: кэширование, декодирование, сессии, аутентификация, статический контент и т.п.;
  • возможность работы под Python 2.7+, Python 3.1+, PyPy, Jython и Android.

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


Sanic

Sanic — Python-фреймворк, который построен на uvloop и предназначен для быстрой обработки HTTP-запросов.

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

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

Tornado



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

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

Основные достоинства:

  • встроенная поддержка аутентификации пользователей;
  • услуги в режиме реального времени;
  • высококачественная производительность;
  • язык веб-шаблонов на основе Python;
  • неблокирующий HTTP-клиент;
  • внедрение сторонних схем аутентификации и авторизации (Google OpenID / OAuth, Facebook Login, Yahoo BBAuth, FriendFeed OpenID / OAuth, Twitter OAuth);
  • поддержка переводов и локализаций.

Бонус


Dash



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

Приложения Dash — веб-серверы, которые запускают Flask и обмениваются данными с пакетами JSON по HTTP. Их интерфейс обеспечивает компоненты возможностями React.js.

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

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

Skillbox рекомендует:

Комментарии (26)


  1. Terras
    14.08.2018 10:28

    Хочу уточнить немного:

    Я правильно понимаю, что AIOHTTP + asyncio — оказались непригодными, и теперь мейнстрим это Sanic?


    1. TheDeadOne
      14.08.2018 11:06

      Нет, не правильно.


    1. Nerevar_soul
      14.08.2018 12:00

      Sanic побыстрей чем aiohttp, но зато последний релиз был в декабре 2017. Когда будет новый релиз не понятно. В том релизе который есть, даже версии зависимостей не зафиксированы, из-за чего словили тут баг, когда websocket обновились.
      В итоге aiohttp выглядит постабильней и поддержка лучше. Sanic побыстрей, но разница уже уменьшается.


      1. TheDeadOne
        14.08.2018 16:09

        Это странно, если учитывать, что автор aiohttp — Андрей Светлов. Как измеряли?


        1. Nerevar_soul
          14.08.2018 19:02

          В сети есть бенчмарки на всякие hello word. В них сейчас разница в 1,5-2 раза в зависимости от версии Sanic и aiohttp.
          Мы свой проект нагружали, там разница не такая большая, но Sanic побольше нагрузку держит.
          Ну и если на то пошло, самые крутые бенчмарки сейчас у vibora, но для продакшена это фреймворк не гоов, а когда будет готов, то еще неизвестно какие цифры будут.


          1. danSamara
            14.08.2018 21:42

            Вы замеряли aiohttp с uvloop?


            1. Nerevar_soul
              15.08.2018 10:49

              Да конечно.


        1. vazir
          15.08.2018 00:02

          Не странно — sanic использует magicstack httptools parser — а он написан на c. (uvloop — тоже эти ребята)
          aiohttp — python native. По факту — разница не в 1.5-2 раза, а более чем в 10.
          В моих тестах (на ноуте) был приблизительно следующий результат
          — aiohttp — ~6к Requests per Second
          — sanic — ~30k RPS
          — Naked httptools — 90K
          НО! Следует понимать что:
          1. aiohttp и sanic это куча кода, плюшек, удобств. А magicstack это парсер — и добавление плюшек замедляет (хотя далеко не так как в aiohttp)
          2. Такой результат только при работе на установившихся соединениях — если на каждый запрос создавать и рвать соедиенение то результат упадет раз в 20.


          1. vzhicharra
            15.08.2018 01:20

            vibora не пробовали?


            1. vazir
              15.08.2018 08:50

              нет. К стати vybora performance тесты не совсем корректны, они распараллеливают, а при использовании вышесказанных либ, речь шла об однопоточной производительности.


              1. vazir
                15.08.2018 12:59

                Они тоже используют http_parser на С — только похоже сами написали. Ну это радует. +1 потенциально быстрый фреймворк… Главное чтобы не заглох.


              1. vzhicharra
                16.08.2018 12:45

                т.е. vibora — это multithreading а sanic и другие — это асинхронщина?


                1. Nerevar_soul
                  16.08.2018 16:25

                  Нет, там также в основе asyncio.
                  Распараллеливается же с помощью multiprocessing, треды тут никак не могут помочь.


  1. Desprit
    14.08.2018 10:57
    +2

    10 веб-фреймворков Python, с которыми стоит работать в 2018 году

    Но прежде чем начать с ним работать, стоит запомнить, что с Python 3 он несовместим.

    ?


    1. IvanTamerlan
      14.08.2018 21:22

      это про Web2py.
      Очень не хватило таблички, хотя бы на уровне сравнения — какие версии питонов поддерживает.


  1. Zanak
    14.08.2018 11:08

    Falcon, на мой взгляд, вполне достоин упоминания.


    1. Senpos
      14.08.2018 19:39

      Абсолютно поддерживаю. Для API — отличный выбор. Действительно минималистичен и среди синхронных фреймворков является крайне быстрым (частично на Cython).

      Еще сейчас активно разрабатывается Vibora — асинхронный веб-фреймворк, внутренности которого написаны на Cython, из-за чего он получился невероятно быстрым (на странице проекта есть относительно свежие бенчмарки). До production-ready ему далеко, но «звездочку» им поставил, однозначно стоит следить. :)


      1. alexdoesh
        15.08.2018 01:54

        Активно — last commit was 28 days ago, но выглядит приятно


  1. public_static__void
    14.08.2018 12:00

    CherryPy удобен, так так хорошо работать одновременно с другими библиотеками, создавать потоки, синхрон и асинхрон, вообще большой простор для фантазии
    в отличии от джанго =/


  1. alexdoesh
    14.08.2018 19:45

    А куда дели API Star? Sanic практически неюзабельный


  1. ZloyKishechnik
    15.08.2018 10:04

    Это очень полезная статья.
    Но в связи с этим возникает вопрос, есть ли уже готовые cms, как, например, wordpress, но написанные на Питоне?
    Т.е. почти как plug-n-play — запустил установщик, и вот тебе готовый сайт.

    А не так, как с django или даже django-cms, надо сначала установить, потом написать свои apps, а только после запускать все в продакшн? И еще не забыть сделать свой шаблон для сайта…


    1. Terras
      15.08.2018 10:24

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


      1. apapacy
        15.08.2018 13:36

        Я думаю причина в другом. А именно в том что создать cms да ещё бесплатно не такая простая задача. Например на том же php до недавнего времени не было аналога для построения админок аналогичной по возможностям с Django. Поэтому то что Django это python а wordpress это php это просто ход истории а не атрибут какого то языка. Приведу Вам ещё пример. Для nodejs также нет широко используемых cms и только недавно появились конструкторы админок. Но это уже внутри какого то фреймворка react, vue и т.д. И это все при том притоке разработчиков js ко трое имеем.


        1. Zanak
          15.08.2018 17:42

          Не согласен.
          Cms — это продукт, ориентированный, прежде всего, на пользователя, который управляет содержимым сайта. Django, например — это фреймворк, читай — инструмент, созданный для облегчения разработки, в том числе и cms. Сравнивать их не корректно, на мой взгляд.
          Широта использования того или иного инструмента или продукта — это вопрос усилий по продвижению их авторов. WordPress или Magento весьма известны и популярны, не без усилий владельцев, которые зарабатывают на поддержке этих opensource проектов.
          Почему нет столь же успешных проектов на python — это отдельный повод для размышлений.


          1. apapacy
            16.08.2018 03:49

            Я не сравнивал Django с cms. Я говорил что в каждом языке есть свои опенсорсные инструменты. И в python нет общепризнанной лидирующей cms не потому что это такой язык а потом у что создать что то хорошее и бесплатное это довольно сложно. Аналогично в php до недавнего времени не было средств для построения админок которая есть например у Django. Что как раз можно заключить из той реплики на которую я ответил что в python нет cms потому что она там не нужна тк все уже есть в самом питоне


          1. apapacy
            16.08.2018 04:36

            Широта использования того или иного инструмента или продукта — это вопрос усилий по продвижению их авторов.

            Я как и многие разработчики человек непредвзятый по отношению к технологиям и фрнймвкркам. Я неоднократно пытался найти cms не обязательно топовую которая ускорила разработку. Кроме wp или drupal. И пока что ничего не попадалось. Есть на php такая линейка как бы даже поддерживаемая идеологами symfony. Это zulu cms. Вообщк то даже разработчики позиционируют ее как для сайтов среднего уровня по сложности и по нагрузке. Под node.js вообще все просмотренные мной cms элементарно глючат.
            Это я к тому говорю что не только в продвижении дела если говорить о продвижении как о маркетинговом процессе.