Python — це одночасно і розважальний інструмент, і потужна зброя. Подібно до цього, можливості Python є надзвичайно різноманітними.
Python користується популярністю серед різних груп користувачів, від початківців до вчених і досвідчених архітекторів.
Він відносно легкий у вивченні, має абстракції високого рівня та інструменти метапрограмування, що дозволяють створювати складні системи. Крім того, існує безліч бібліотек для вирішення будь-яких завдань. Хоча є певні обмеження щодо паралелізму та строгої типізації, їх можна обійти.
У цій статті ми розглянемо кілька видатних Python-фреймворків, які підходять для розробки веб-додатків різного масштабу.
Django
Django є перевіреним часом веб-фреймворком, стандартом у Python-спільноті. Якщо Python-розробника раптово розбудити і змусити створити веб-додаток, він автоматично обере Django, подібно до того, як розробник Ruby вибере Rails.
І це не безпідставно. Django, як стверджує його слоган, є “веб-фреймворком для перфекціоністів з обмеженим часом”. Це так званий фреймворк “з батарейками в комплекті”, що пропонує всі необхідні стандартні функції “з коробки”.
Ці функції значно прискорюють процес розробки:
- Зручний ORM з автоматичною генерацією та застосуванням міграцій.
- Автоматична генерація адмін-панелі на основі моделей.
- Підтримка файлів cookie, сесій, проміжного ПЗ, шаблонів і т.д.
- Автоматичне застосування функцій безпеки, таких як захист від XSS та CRSF.
- Сумісність з більшістю існуючих баз даних (легко знайти адаптери для тих, що не мають офіційної підтримки).
- Повноцінна підтримка географічних даних та просторових запитів через GeoDjango.
І багато іншого. Отже, Django – це повноцінна та зручна веб-платформа.
Чи підходить Django для вас?
Безумовно.
Django є чудовим вибором для будь-якого застосування, від швидкого прототипування до розробки корпоративних систем. Єдиний недолік – структура фреймворку. Оскільки Django прагне зробити розробку швидкою та простою, він нав’язує свою структуру (“конвенція замість конфігурації”), з якою ви можете не погодитися. Наприклад, якщо ви захочете замінити Django ORM на щось інше (наприклад, SQL Alchemy), будьте готові до несподіванок.
Хочете стати професійним розробником з Django та Python? Рекомендуємо цей чудовий онлайн-курс.
Flask
У той час як Django бере на себе більшу частину роботи у веб-розробці на Python, Flask є серйозним конкурентом.
На відміну від Django, Flask є “мікрофреймворком”, тобто він зосереджується на кількох мінімальних функціях, а решту залишає на ваш розсуд. Цей підхід може бути як джерелом розчарування, так і задоволення, залежно від ваших потреб. Для тих, хто знає, що робить і хоче створювати свої веб-додатки, обираючи компоненти самостійно, Flask – ідеальний варіант.
Flask пропонує такі можливості:
- Маршрутизація, створення шаблонів, керування сесіями та інші корисні функції.
- Повна підтримка модульного тестування.
- Мінімальна, розширювана архітектура.
- Повноцінна підтримка REST API.
- Підтримка Blueprints, унікального підходу Flask до архітектури малих веб-додатків.
- Можливість вибору пакетів для ORM, міграцій тощо.
- Гнучка структура додатків – розміщуйте файли там, де вам зручно.
- Обслуговування статичних файлів.
- Сумісність з WGSI.
Чи підходить Flask для вас?
Як вже згадувалось, Flask – це мінімальний веб-фреймворк, де все розбито на окремі компоненти, які можна замінити. Якщо ви поспішаєте створити прототип, ви витратите багато часу на прийняття простих рішень щодо бази даних, структури папок, маршрутизації, що може бути контрпродуктивним. Flask найкраще підходить для стабільних проектів середнього та великого розміру, особливо REST API.
Bottle
Якщо підхід Flask здається вам недостатньо мінімальним і ви хочете більшого контролю, зверніть увагу на Bottle.
Bottle йде далі, до того, що його єдина залежність – стандартна бібліотека Python. Це означає, що не потрібно встановлювати додаткові пакети, хоча рано чи пізно вам, швидше за все, доведеться це зробити. Ось чому деяким подобається Bottle:
- Однофайлове розгортання. Вся програма міститься в одному файлі “.py”.
- Відсутність зовнішніх залежностей. Якщо у вас встановлена потрібна версія Python, ви готові до роботи.
- Вбудований механізм шаблонів, який можна замінити на Jinja2, Mako або Cheetah.
- Підтримка форм, заголовків, файлів cookie та завантаження файлів.
- Вбудований веб-сервер, який можна легко замінити.
Чи підходить Bottle для вас?
Якщо ви створюєте невелику програму (скажімо, менше 500 рядків коду) без особливих вимог, Bottle може бути хорошим варіантом. Це простий підхід до розробки веб-додатків, але на практиці Bottle може більше заважати, ніж допомагати. Справа в тому, що реальність постійно змінюється, і вам будуть потрібні нові функції. У цей момент розміщення всього в одному файлі стане проблемою.
До речі, якщо ви думаєте, що Bottle та Flask майже однакові, ви маєте рацію. Пропозиції про злиття цих проектів датуються 2012 роком, і навіть Армін, творець Flask, з цим згоден. Однак Марсель, творець Bottle, наполягає на тому, щоб вони залишалися окремими через ідеологічну різницю та однофайловий підхід.
Zope
Zope важко пояснити, але я спробую. Так, це веб-фреймворк, який можна використовувати для створення додатків різного масштабу, але це не все. Zope – це скоріше платформа, що складається з інструментів (включаючи веб-фреймворки), створених згідно з філософією Zope і підтримуваних Zope Corporation.
Zope має кілька цікавих компонентів і функцій, що підходять для розробки корпоративних програм:
- Архітектура реєстрації та виявлення компонентів для налаштування великих додатків.
- ZODB – (єдина) база даних об’єктів для Python, що дозволяє зберігати об’єкти в нативному вигляді.
- Повноцінна структура та стандарти для систем управління контентом.
- Набір фреймворків веб-додатків – канонічний все ще називається Zope, хоча на його основі створено кілька нових (наприклад, Grok).
- Суворі стандарти розробки, випуску та обслуговування програмного забезпечення.
Чи підходить Zope для вас?
Якщо ви шукаєте високоструктуроване середовище для створення дійсно великих програм, Zope підійде. Однак ви зіткнетеся з певними труднощами. Хоча Zope продовжує розвиватися, спільнота настільки мала, що багато Python-розробників навіть не чули про нього. Знайти навчальні матеріали та велику документацію важко, тому будьте готові до довгих пошуків (хоча спільнота дуже допомагає!). Крім того, Python-розробники, яких ви зустрінете, можуть не захотіти вивчати Zope і “розбавляти” свій набір навичок.
TurboGears
TurboGears – це дуже гнучкий фреймворк з комбінованою архітектурою. Він масштабується відповідно до ваших потреб, і ви можете використовувати його для створення як однофайлових програм, так і великих систем з кількома орендарями.
TurboGears має кілька елегантних функцій, деякі з яких відсутні в популярних фреймворках (наприклад, Django) або їх важко реалізувати:
- Повноцінна підтримка кількох баз даних.
- Транзакції з кількома базами даних.
- Висока модульність – почніть з одного файлу і масштабуйтеся настільки, наскільки потрібно.
- Потужний ORM (SQLAlchemy, більш зрілий та функціональний, ніж ORM Django).
- Розширювана архітектура на основі специфікації WSGI.
- Вбудована підтримка шардингу бази даних.
- Інтерфейс, керований функціями, а не глибокими і жорсткими об’єктно-орієнтованими ієрархіями.
Чи підходить TurboGears для вас?
Якщо ви хочете стабільно розвиватися і потребуєте перевірений, зрілий і надійний фреймворк, вільний від шуму медіа про “супер-круті технології”, TurboGears – відмінний вибір. Він користується повагою у спільноті та має детальну документацію. Звичайно, TurboGears не є нав’язливим, тому час початкового налаштування може бути трохи довшим, але це ідеальний фреймворк для розробки корпоративних програм.
Web2py
Web2py розпочався як хобі-проект і був випущений у 2007 році. Його мета – зробити веб-розробку легкою та доступною для всіх.
Web2py дотримується принципу відсутності залежностей до крайності – він не має жодних вимог, нічого не потрібно встановлювати, і він включає повнофункціональний веб-редактор для розробки, керування базами даних, а також розгортання.
Можна сказати, що це більше, ніж просто фреймворк, це повноцінне середовище розробки, як Android Studio. Ось деякі корисні можливості Web2py:
- Практично відсутня крива навчання.
- Мінімальне ядро (всього 12 об’єктів), яке навіть можна запам’ятати!
- Шаблони на основі чистого Python.
- Захист від XSS, CSRF та інших атак.
- Зручний та послідовний API.
Чи підходить Web2py для вас?
Web2py – це стабільний та цікавий фреймворк, але важко рекомендувати його замість інших варіантів, таких як Django, Flask тощо. На ринку мало вакансій для розробників Web2py, і якість його модульного тестування не на висоті. Проте, вам може сподобатися API коду і загальний досвід, який пропонує фреймворк, особливо якщо ви створюєте REST API.
CherryPy
CherryPy – це ще один мікрофреймворк, метою якого є надання базових функцій та швидка робота.
Хоча його можна порівняти з іншими мікрофреймворками, такими як Flask, CherryPy має кілька відмінностей:
- Вбудований багатопотоковий сервер (чого немає у Flask).
- Один веб-сервер може обслуговувати кілька додатків.
- Можливість обслуговування програми як програми WSGI (для взаємодії з іншими програмами WSGI) або звичайного HTTP-сервера (який працює краще).
- Повноцінна підтримка профілювання та модульного тестування.
- Працює на PyPy (для ентузіастів продуктивності), Jython і навіть Android.
CherryPy робить все це, а також звичайні речі, яких ви очікуєте від веб-фреймворка.
Чи підходить CherryPy для вас?
Якщо ви в основному створюєте RESTful сервіси, CherryPy є більш серйозним конкурентом, ніж Flask. Це зрілий фреймворк з десятирічною історією, що підходить як для невеликих, так і для великих програм.
Sanic
Популярність Node і його моделі асинхронного програмування залишила багато спільнот, включаючи Python, позаду. Як реакція, на горизонті з’явилася низка асинхронних веб-фреймворків, одним з яких є Sanic.
Sanic натхненний Flask і запозичив його декоратори маршрутів, Blueprints та інші базові компоненти. І вони цього не приховують. Sanic пропонує справжній неблокуючий ввід-вивід, який відповідає рівню продуктивності Node. Простіше кажучи, Sanic – це Flask з підтримкою async/await!
У порівнянні з CherryPy, Sanic демонструє значно вищу продуктивність (уявіть, як він покаже себе порівняно з Flask!). Ознайомтеся з результатами тестування від DataWeave:
Як бачите, як тільки кількість паралельних запитів перевищує 50 на секунду, CherryPy практично “задихається” і генерує багато помилок.
Чи підходить Sanic для вас?
Незважаючи на високу продуктивність, Sanic може бути не найкращим вибором для вашого наступного проекту. Основна причина – недостатня кількість асинхронних бібліотек. Більшість існуючих інструментів і бібліотек Python написані для однопотокової версії CPython і не враховують високий паралелізм або асинхронні операції. Якщо ваш улюблений ORM не підтримує асинхронні операції, наприклад, весь сенс використання Sanic втрачається.
Через ці причини ми не будемо розглядати інші асинхронні фреймворки в Python.
Masonite
Нещодавно я натрапив на цей фреймворк і подумав, що це крок у правильному напрямку. Відтоді вийшла версія 2.0, і я відчуваю, що нарешті час приділити Masonite трохи уваги.
Простіше кажучи, Masonite – це Python-версія Laravel (відомого фреймворку PHP, якщо ви не знали). Чому це важливо? Це важливо, тому що Laravel був побудований на принципах Ruby on Rails, і разом ці два фреймворки дають розробникам, що не використовують Ruby, можливість відчути “шлях Rails” у виконанні завдань.
Розробники Laravel (і певною мірою Rails) почуватимуться як удома і зможуть швидко почати роботу. Коли я спробував Masonite (і навіть знайшов одну-дві помилки!), я зміг створити REST API без зайвих роздумів, оскільки моя м’язова пам’ять від Laravel робила все.
Як повноцінний фреймворк, Masonite пропонує кілька цікавих можливостей:
- ORM у стилі Active Record.
- Міграції бази даних (які, на відміну від Django, має створювати розробник).
- Потужний контейнер IoC для впровадження залежностей.
- Власний CLI (так званий “craft”) для створення шаблонів та виконання завдань.
- Повноцінна підтримка модульного тестування.
Найбільший “конкурент” для Masonite – це Django, оскільки спільнота робить все можливе, щоб просувати фреймворк як простий, чудовий і наступний великий проект. Чи перевершить він Django, покаже час (якщо ви запитаєте мене, він має хороші шанси), а для обговорення порівняння цих двох дивіться тут і тут.
Чи підходить Masonite для вас?
У порівнянні з Django, Masonite все ще “дитина”, тому його не можна рекомендувати як заміну Django. Проте, якщо вам подобається підхід Rails (або Laravel), вам сподобається те, що може запропонувати Masonite. Він ідеально підходить для швидкого прототипування, що потребує попереднього налаштування та легкого перемикання.
Висновок
Python пропонує багато фреймворків, як великих, так і малих. Хоча для невеликого проекту підійде майже будь-який, корпоративний додаток має вимоги, які не можуть задовольнити більшість із цих фреймворків. На мій погляд, для розробки великих систем варто розглянути Django (певною мірою), Zope та TurboGears. І навіть серед них я віддаю перевагу TurboGears.
Тим не менш, будь-який кваліфікований архітектор може взяти мікрофреймворк і розгорнути свою власну архітектуру. І це приблизно те, що відбувається на практиці, що пояснює популярність Flask та подібних рішень.
Якщо ви новачок, то цей онлайн-курс допоможе вам вивчити Python.
Потім ви можете дослідити спеціалізовані Python-фреймворки для створення API.