9 най-добри рамки на Python за изграждане на малки до корпоративни приложения

Python е едновременно забавна играчка и плашеща огнехвъргачка. Същото важи и за това, което можете да правите с Python.

Python е обичан както от любители, така и от учени и архитекти.

Адски лесно е да започнете с него, има абстракции от по-висок порядък и възможности за метапрограмиране за изграждане на големи и сложни системи и има много библиотеки за правене на почти всичко. Разбира се, има ограничения, когато става въпрос за паралелност и силно въвеждане, но можете да ги заобиколите.

В тази статия ще хвърлим поглед към някои от най-добрите рамки на Python, когато става въпрос за изграждане на големи и малки уеб приложения.

Джанго

The Джанго рамката издържа изпитанието на времето уеб рамката за общността на Python. Ако нападнете разработчик на Python в съня му и го принудите да изгради уеб приложение с оръжие, той автоматично ще посегне към Django, както Rubyist ще посегне към Rails.

И има основателна причина за това. Django е, както се казва в мотото, „уеб рамка за перфекционисти със срокове“. Това е така наречената рамка „включени батерии“ (подобно на начина, по който Python е език с включени батерии), която предоставя цялата обща функционалност веднага.

С тези вградени функции Django значително съкращава времето за разработка:

  • Удобен и приятен ORM с миграции, създадени и прилагани автоматично от рамката.
  • Скеле за автоматично генериране на админ панел въз основа на вашите модели.
  • Поддръжка на бисквитки, сесии, междинен софтуер, шаблони и др.
  • Функции за сигурност като предотвратяване на 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.

  6 съвета за организиране на вашите iPhone приложения

Бутилка

Ако смятате, че подходът на Flask не е достатъчно минимален и че все пак искате повече контрол, кажете здравей на Бутилка.

Бутилката излиза още повече, до точката, в която единствената зависимост е стандартната библиотека на Python. Това означава, че няма да инсталирате pip това или pip да инсталирате онова, въпреки че най-вероятно ще трябва да го направите скоро. Ето защо Бутилката се откроява за някои хора:

  • Внедряване на един файл. Да, цялото ви приложение живее в един файл „.py“.
  • Без външни зависимости. Ако имате инсталирана правилната версия на Python, готови сте.
  • Доставя своята машина за шаблони, която може да бъде заменена с Jinja2, Mako или Cheetah.
  • Поддръжка за формуляри, заглавки, бисквитки и качване на файлове.
  • Вграден уеб сървър, който лесно може да бъде заменен.

Бутилката за вас ли е?

Ако правите наистина малко приложение (да речем, по-малко от 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)
  • Pluggable архитектура, базирана на спецификацията WSGI
  • Вградена поддръжка за шардинг на бази данни
  • Интерфейс, управляван от функции, за разлика от дълбоките, твърди обектно-ориентирани йерархии.

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, до степента, в която е заимствал декораторите на маршрута, чертежите и други фундаментални куки и кука. И не се срамуват да го признаят. Това, което Sanic предлага на масата, ако сте фен на Flask, е истински неблокиращ I/O, за да отговаря на нивата на производителност на Node приложение. С други думи, Sanic е Flask с поддръжка на async/await!

  11 най-добри инструменти за наблюдение на медиите за управление на бранд

В сравнение с CherryPy, Sanic има невероятно предимство в производителността (само си помислете как би се представил срещу Flask!). Вижте следните резултати, тествани от DataWeave:

Както можете да видите, след като числата на паралелността започнат да надвишават 50 в секунда, CherryPy практически се задушава и предизвиква висок процент на неуспех.

Санич за теб ли е?

Въпреки че характеристиките на Sanic издухват всичко останало, той може да не е най-добрият избор за следващия ви проект. Основната причина е липсата на асинхронни библиотеки. По-голямата част от съществуващите инструменти и библиотеки на Python са написани за версията на CPython с една нишка, без предварително обмисляне на висока едновременност или асинхронни операции. Ако например вашият любим ORM не поддържа асинхронни операции, целият смисъл на използването на Sanic се губи.

Поради тези причини за зрялост и наличност, няма да изследваме повече асинхронни рамки в Python.

Мазонит

Попаднах на тази рамка преди известно време и си помислих, че е стъпка в правилната посока. Оттогава беше пусната версия 2.0 и чувствам, че най-накрая е дошло времето да дам Мазонит малко обич.

Просто казано, Masonite е Python версията на Laravel (известна PHP рамка, в случай че не знаете). Защо това има значение? Има значение, защото Laravel е изграден на принципите на Ruby on Rails и заедно тези две рамки позволяват на разработчиците, които не са Ruby, да изпитат „Rails Way“ на правене на нещата.

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

Като рамка с пълен набор от батерии, Masonite носи няколко интересни неща на масата:

  • ORM в стил активен запис
  • Миграции на бази данни (които, за разлика от Django, трябва да бъдат създадени от разработчика)
  • Мощен IoC контейнер за инжектиране на зависимости
  • Собствен CLI (наречен „занаят“) за скеле и текущи задачи
  • Първокласна поддръжка за модулно тестване

Най-големият „съперник“ на Masonite е Django, тъй като общността прави всичко възможно да рекламира рамката като лесна, възхитителна и следващото голямо нещо. Дали ще надмине Django е нещо, което времето ще покаже (ако питате мен, има приличен изстрел), но за дискусия, сравняваща двете, вижте тук и тук.

Мазонит за вас ли е?

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

Заключение

Няма недостиг на рамки на Python, големи и малки. Въпреки че можете да изберете почти всичко за малък проект, едно корпоративно приложение има изисквания, които не много от тези рамки могат да изпълнят. Ако питате мен, за корпоративно развитие, Django (до известна степен), Zope и TurboGears са това, което идва на ум. И дори сред тях, аз съм склонен към TurboGears.

Въпреки това, всеки архитект, който си заслужава солта, може да вземе микрорамка и да разгърне своята архитектура. И това е почти това, което се случва на практика, което обяснява успеха на Flask и подобни идеи.

Ако сте начинаещ, тогава този онлайн курс би било полезно да научите Python.

След това разгледайте някои от специализираните рамки на Python за изграждане на API.