9 найкращих фреймворків Python для створення малих і корпоративних програм

Python — це водночас весела іграшка і лякаючий вогнемет. Те саме стосується того, що ви можете робити з Python.

Python однаково люблять любителі, науковці та архітектори.

Почати з ним до біса легко, він має абстракції вищого порядку та можливості метапрограмування для створення великих і складних систем, а також має величезну кількість бібліотек для будь-яких завдань. Звичайно, існують обмеження щодо паралельності та надійної типізації, але їх можна обійти.

У цій статті ми розглянемо деякі з найкращих фреймворків Python, коли справа доходить до створення великих і малих веб-додатків.

Джанго

The Джанго фреймворк витримав випробування часом — стандартний веб-фреймворк для спільноти Python. Якщо ви напали на розробника Python уві сні та змусили його створювати веб-додаток під дулом зброї, вони автоматично потягнуться до Django, як Rubyist потягнеться до Rails.

І для цього є вагома причина. Django, як сказано в слогані, «веб-фреймворк для перфекціоністів із дедлайнами». Це те, що називається фреймворком «батареї в комплекті» (дуже подібно до того, як Python є мовою батарейок), яка надає всі стандартні функції з коробки.

Завдяки цим функціям Django значно скорочує час розробки:

  • Зручний і приємний ORM з міграціями, створеними та застосованими автоматично фреймворком.
  • Скаффолдинг для автоматичної генерації адмінпанелі на основі ваших моделей.
  • Підтримка файлів cookie, сеансів, проміжного ПЗ, шаблонів тощо.
  • Такі функції безпеки, як запобігання XSS, запобігання CRSF тощо, застосовуються автоматично.
  • Працює практично з усіма наявними базами даних (легко знайти адаптери, де немає офіційної підтримки)
  • Проте першокласна підтримка географічних даних і просторових запитів GeoDjango

І багато, багато іншого. Досить сказати, що Django — це повномасштабна, зручна веб-платформа.

Django для вас?

Абсолютно так.

Django чудово підходить для всіх випадків використання, будь то швидке прототипування чи планування корпоративної програми. Єдиним недоліком, з яким ви зіткнетеся, є структура фреймворку. Оскільки Django намагається зробити розробку швидкою та легкою для вас, вона нав’язує розробнику свою структуру (концепцію під назвою «конвенція замість конфігурації»), з якою ви можете не погоджуватися. Наприклад, якщо ви хочете замінити Django ORM чимось іншим (скажімо, SQL Alchemy), будьте готові до сюрпризів.

Хочете стати повноцінним розробником із Django та Python? – Перегляньте це фантастичний онлайн-курс.

Колба

Хоча Django бере на себе майже весь розум у веб-розробці Python, Колба є сильним суперником.

На відміну від Django, Flask є «мікрофреймворком», що означає, що він зосереджується на правильному виконанні кількох мінімальних речей, а решту залишає вам. Це «решта залежить від вас» може бути джерелом розчарування або задоволення, залежно від ваших цілей. Для тих, хто знає, що робить, і хоче з любов’ю створювати свої веб-додатки, вибираючи компоненти на власний розсуд, Flask — це знахідка.

Flask пропонує такі функції:

  • Маршрутизація, створення шаблонів, керування сесіями та інші корисні функції.
  • Повна підтримка модульного тестування
  • Мінімальна архітектура, що підключається
  • Першокласна підтримка REST
  • Підтримка Blueprints, унікального погляду Flask на архітектуру для маленьких веб-додатків
  • Виберіть пакети для ORM, міграції тощо.
  • Гнучка структура додатків — розмістіть файли там, де вони є для вас найбільш зрозумілими
  • Обслуговування статичних файлів
  • Сумісність з WGSI

Flask для вас?

Як уже було сказано, Flask — це мінімальний веб-фреймворк, у якому все розбито на окремі компоненти, які можна замінити. Якщо ви поспішаєте створити прототип, ви витратите багато часу на прийняття тривіальних рішень щодо бази даних, структури папок, маршрутизації тощо, що може виявитися контрпродуктивним. Flask найкраще працює, коли ви працюєте над стабільним, серйозним проектом середнього та великого масштабу, особливо REST API.

  Як продати свій старий iPhone за найвищий долар

Пляшка

Якщо ви вважаєте, що підхід Flask недостатньо мінімальний і все одно бажаєте отримати більше контролю, передайте привіт Пляшка.

Bottle стає ще більшим, аж до того, що єдиною залежністю є стандартна бібліотека Python. Це означає, що не потрібно встановлювати pip це або pip те, хоча вам, швидше за все, доведеться це зробити незабаром. Ось чому Bottle виділяється для деяких людей:

  • Однофайлове розгортання. Так, уся ваша програма міститься в одному файлі «.py».
  • Відсутність зовнішніх залежностей. Якщо у вас встановлено правильну версію Python, все готово.
  • Постачає механізм створення шаблонів, який можна замінити на Jinja2, Mako або Cheetah.
  • Підтримка форм, заголовків, файлів cookie та завантаження файлів.
  • Вбудований веб-сервер, який можна легко замінити.

Пляшка для вас?

Якщо ви створюєте справді невелику програму (скажімо, менше ніж 500 рядків коду) без особливих вимог, Bottle може мати для вас великий сенс. Це абсолютно безглуздий підхід до створення веб-програм, але на практиці ви побачите, що Bottle вам більше заважає, ніж допомагає. Причина в тому, що реальний світ завжди змінюється, і ви цього не усвідомлюєте. Вам на голову звалять нові вимоги. У цей момент помістити все в один файл стане клопіткою.

Крім того, якщо ви думаєте, що пляшка і фляга майже однакові, ви маєте рацію. Пропозиції злиття обидва датуються 2012 роком, і навіть Армін, творець Flask, погоджується з цим. Однак Марсель, творець Пляшки, дотримується суворої ідеологічної відмінності через однофайловий підхід і наполягає на тому, щоб вони залишалися окремими.

Зопе

Зопе складно пояснити, але я спробую. Так, це веб-фреймворк, який можна використовувати для створення великих чи малих програм, але це ще не все. Zope — це більше платформа, яка складається з інструментів (включаючи веб-фреймворки), створених відповідно до філософії Zope і підтримуваних Zope Corporation.

У Zope є кілька цікавих компонентів і функцій, придатних для розробки корпоративних програм:

  • Архітектура реєстрації та виявлення компонентів для налаштування великої програми.
  • ЗОДБ — (єдина) база даних об’єктів для Python для зберігання об’єктів у нативному вигляді.
  • Повноцінна структура та стандарти для систем управління контентом
  • Набір фреймворків веб-додатків — канонічний все ще називається Zope, хоча на його основі було створено кілька нових фреймворків (наприклад, Grok).
  • Суворі стандарти розробки, випуску та обслуговування програмного забезпечення.

Zope для вас?

Якщо ви шукаєте високоструктуроване середовище для створення дійсно великих програм, Zope підійде. Тим не менш, ви також зіткнетеся зі своєю часткою проблем. Незважаючи на те, що Zope продовжує розвиватися, спільнота настільки мала, що багато розробників Python навіть не чули про нього. Знайти підручники та велику документацію важко, тож будьте готові багато копатися (хоча спільнота справді корисна!). Крім того, розробники Python, яких ви зустрінете, можуть не захотіти вивчати Zope і «розбавити» свій набір навичок.

TurboGears

TurboGears це дуже гнучкий фреймворк, який має справді комбіновану архітектуру. Це структура, яка масштабується відповідно до ваших потреб, і ви можете використовувати її для створення однофайлової програми або гіганта з кількома орендарями.

TurboGears має кілька елегантних функцій, деякі з яких або відсутні в популярних фреймворках (наприклад, Django), або їх важко створити:

  • Першокласна підтримка кількох баз даних
  • Транзакції з кількома базами даних
  • Висока модульність — починайте з одного файлу та масштабуйте стільки, скільки вам потрібно
  • Потужний ORM (SQLAlchemy, який є більш зрілим і здатним, ніж ORM Django)
  • Підключається архітектура на основі специфікації WSGI
  • Вбудована підтримка шардингу бази даних
  • Інтерфейс, керований функціями, на відміну від глибоких, жорстких об’єктно-орієнтованих ієрархій.
  Чи працюватимуть ваші улюблені програми для iPhone на iPad?

TurboGears для вас?

Якщо ви хочете щасливо розвиватися та хочете мати перевірену, зрілу та надійну структуру, подалі від шуму медіа «чудовий, наступного покоління» тощо, TurboGears чудово підходить. Він користується високою повагою в суспільстві та має повну розширену документацію. Звичайно, TurboGears не є самовпевненим, а це означає, що час початкового налаштування та конфігурації може тривати більше, але це ідеальна структура для розробки корпоративних програм.

Web2py

Web2py розпочався як проект для хобі та був випущений у 2007 році. Його цілі — зробити веб-розробку легкою та доступною для всіх.

Як наслідок, Web2py використовує підхід нульової залежності до крайності — він не має жодних вимог, нічого не потрібно встановлювати та включає повнофункціональний веб-редактор для розробки, керування базами даних, а також розгортання.

Ви можете думати про це як про Android Studio, яка є більше повним середовищем, ніж просто фреймворком. Деякі приємні функції Web2py:

  • Практично немає кривої навчання.
  • Мінімальне ядро ​​(всього 12 об’єктів), яке можна навіть запам’ятати!
  • Шаблони Pure-Python
  • Захист від XSS, CSRF та інших атак
  • Приємний і послідовний API

Web2py для вас?

Web2py — це стабільний і цікавий фреймворк, але важко рекомендувати його проти інших варіантів, таких як Django, Flask тощо. Роботи майже немає, а історія модульного тестування не є чудовою. Тим не менш, вам може сподобатися API коду та загальний досвід, який пропонує фреймворк, особливо якщо ви створюєте REST API.

CherryPy

CherryPy це ще один мікрофреймворк, який має на меті забезпечити базову функціональність фреймворку та швидко позбутися шляху.

Хоча його можна порівняти з іншими мікрофреймворками, такими як Flask, CherryPy може похвалитися деякими відмінностями:

  • Він містить вбудований багатопоточний сервер (те, що залишається в списку бажань Flask)
  • (Один) веб-сервер може розміщувати декілька програм!
  • Обслуговуйте свою програму як програму WSGI (для взаємодії з іншими програмами WSGI) або звичайний сервер HTTP (який працює краще)
  • Першокласна підтримка профілювання та модульного тестування
  • Працює на PyPy (для справжніх наркоманів продуктивності), Jython і навіть Android

CherryPy робить все це, а потім звичайне, чого ви очікуєте від веб-фреймворку.

CherryPy для вас?

Якщо ви здебільшого створюєте сервіси RESTful, CherryPy є набагато серйознішим суперником, ніж Flask. Це десятирічний фреймворк, який добре виріс і підходить як для малих, так і для великих програм.

Санік

Зростання Node та його моделі асинхронного програмування залишило позаду багато спільнот, включаючи Python. У відповідь на радарі з’явилася низка асинхронних веб-фреймворків, Санік бути одним із них.

Sanic сильно натхненний Flask, оскільки він запозичив декоратори маршрутів, Blueprints та інші фундаментальні лінії та грузило. І вони не соромляться в цьому зізнатися. Те, що Sanic приносить на стіл, якщо ви шанувальник Flask, це справжній неблокуючий ввід-вивід, який відповідає рівням продуктивності програми Node. Іншими словами, Sanic — це Flask із підтримкою async/await!

Порівняно з CherryPy, Sanic має неймовірну перевагу в продуктивності (тільки подумайте, як він буде проти Flask!). Ознайомтеся з наведеними нижче результатами перевірки DataWeave:

Як ви бачите, щойно показники паралельності починають перевищувати 50 за секунду, CherryPy практично задихається та створює високий рівень відмов.

  Як використовувати жести для редагування тексту на вашому iPhone та iPad

Санік для вас?

Незважаючи на те, що продуктивність Sanic перекриває все інше, він може бути не найкращим вибором для вашого наступного проекту. Основною причиною є відсутність асинхронних бібліотек. Більшість існуючих інструментів і бібліотек Python були написані для однопотокової версії CPython, без попереднього планування високого паралелізму чи асинхронних операцій. Якщо, наприклад, ваш улюблений ORM не підтримує асинхронні операції, весь сенс використання Sanic буде втрачений.

Через ці причини зрілості та доступності ми більше не досліджуватимемо жодних асинхронних фреймворків у Python.

масоніт

Нещодавно я натрапив на цей фреймворк і подумав, що це крок у правильному напрямку. Відтоді була випущена версія 2.0, і я відчуваю, що нарешті настав час віддати масоніт деяка любов.

Простіше кажучи, Masonite — це Python-версія Laravel (відомий фреймворк PHP, якщо ви не знали). Чому це має значення? Це важливо, тому що Laravel було побудовано на принципах Ruby on Rails, і разом ці два фреймворки дозволяють розробникам, які не працюють на Ruby, відчути «Шлях Rails» виконання завдань.

Розробники Laravel (і, певною мірою, Rails) почуватимуться як удома та запрацюють буквально миттєво. Коли я спробував Masonite (і я справді подав одну чи дві проблеми, включно з помилкою!), я зміг створити REST API без жодних роздумів, оскільки моя м’язова пам’ять Laravel робила все.

Як повноцінний фреймворк із акумуляторами, Masonite пропонує кілька цікавих речей:

  • ORM у стилі активного запису
  • Міграція бази даних (яку, на відміну від Django, має створювати розробник)
  • Потужний контейнер IoC для впровадження залежностей
  • Власний CLI (так званий «крафт») для створення риштувань і виконання завдань
  • Першокласна підтримка модульного тестування

Найбільшим «конкурентом» для Masonite є Django, оскільки спільнота робить усе можливе, щоб рекламувати фреймворк як простий, чудовий і наступний великий продукт. Чи перевершить він Django, покаже час (якщо ви запитаєте мене, у нього є пристойний шанс), але для обговорення порівняння цих двох див. тут і тут.

Масоніт для вас?

У порівнянні з Django Masonite все ще є дитиною, тому його не можна рекомендувати замість Django. Тим не менш, якщо вам подобається спосіб Rails (або спосіб Laravel), ви оціните те, що може запропонувати Masonite. Він ідеально підходить для швидкого створення прототипів, які потребують попереднього налаштування та легкого перемикання.

Висновок

Фреймворків Python немає, як великих, так і малих. Незважаючи на те, що для невеликого проекту можна підібрати майже все, корпоративна програма має вимоги, які не можуть виконати багато з цих фреймворків. Якщо ви запитаєте мене, для розвитку підприємства на думку спадають Django (певною мірою), Zope і TurboGears. І навіть серед них я схиляюся до TurboGears.

Тим не менш, будь-який гідний уваги архітектор може взяти мікрофреймворк і розгорнути свою архітектуру. І це приблизно те, що відбувається на практиці, що пояснює успіх Flask і подібних ідей.

Якщо ви новачок, тоді цей онлайн-курс було б корисно вивчити Python.

Далі вивчіть деякі спеціалізовані фреймворки Python для створення API.