5 големи и мощни Python уеб рамки

Когато създавате заден край за уебсайт или услуга, дори такъв, който на пръв поглед изглежда скромен, може бързо да откриете, че е всичко друго, но не и. Дори „прост“ сайт се оказва кошер със сложност. Потребителско управление, дизайн на данни, изпращане на формуляри, сигурност, —изпълнението на всичко това на ръка става досадно.

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

CubicWeb

CubicWeb се ​​таксува като „семантична рамка за уеб приложения, която благоприятства повторното използване и обектно-ориентирания дизайн.“ Това е интригуваща система - както отбеляза Рик Грехан, когато я прегледа през 2011 г., - която набляга на използването на абстракции и многократни градивни елементи на кода, наречени „кубчета“. Всъщност CubicWeb може да е твърде абстрактен или идиосинкратичен за някои разработчици и неговата скорост на развитие и набор от функции изостават в други рамки.

Кубчетата са софтуерни компоненти, които включват схема (модел на данни), обекти (логика на програмиране) и изгледи. Чрез сглобяването на множество кубчета, всяка от които изпълнява собствена задача, можете да съставяте софтуерни приложения, като използвате повторно вашия собствен код и кода на други.

В основата си CubicWeb осигурява основно скеле, използвано от всяко уеб приложение: „хранилище“ за връзки и съхранение на данни; „уеб механизъм“ за основни HTTP заявки / отговори и CRUD действия; и схема за моделиране на данни. Всичко това е описано в дефинициите на клас Python.

За да настроите и управлявате екземпляри на CubicWeb, работите с инструмент за команден ред, подобен на този, използван за Django. Вградената система за шаблониране ви позволява програмно да генерирате HTML изход. Можете също да използвате куб, който предоставя инструменти за уеб интерфейси, като този за Bootstrap HTML рамката.

Въпреки че CubicWeb поддържа Python 3 (от версия 3.23), изглежда не използва собствената асинхронна функционалност на Python 3. Кръгъл начин за включване на асинхронизация би бил използването на модула cubicweb.pyramid, за да се използва рамката на Pyramid като уеб сървър и да се извлече вилица на Pyramid, която използва асинхронни конструкции. Възможно е също да изпълнявате задачи асинхронно с кубика cubicweb-worker. Но нещо по-лесно за сега изглежда недостъпно.

За да извлечете или манипулирате постоянни данни в приложение CubicWeb, използвате Relation Query Language (RQL), който използва неясно синтаксис, подобен на SQL, но е моделиран след SparQL на W3C. Оправданието на CubicWeb за това е отново абстракцията: RQL осигурява силно отделен маршрут за взаимовръзка между различни източници на данни.

Тъй като CubicWeb има много зависимости, най-добре е да използвате, pip installза да ги извлечете всички. Може също да се наложи да извършите определено количество ръчно настройване на местната среда. Това е за разлика от други рамки, където е необходимо само пускане pip installили пускане на кода на рамката в подпапка на друг проект. Или можете да използвате контейнер на Docker, за да стартирате нещата.

CubicWeb нарича своята обширна документация „книгата“. Авторите на книгата отделиха време, за да обяснят необичайния подход на CubicWeb, да демонстрират как да създават някои основни приложения, да включват справки за API и като цяло да се стараят да бъдат конкретни.

CubicWeb остава в активна, макар и бавна разработка. Плановете за CubicWeb 4.0 са обмислени от 2012 г., но все още не е предложена времева линия за предоставянето му.

Джанго

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

Джанго прекара много години, седейки във версия 1.x. Когато Django 2.0 пристигна в края на 2017 г., той отказа съвместимостта с Python 2 в полза на Python 3.4 и по-нови версии. Django 3.0, пуснат през декември 2019 г., изисква Python 3.6 или по-добър и добавя поддръжка за новия асинхронен ASGI стандарт за уеб приложения на Python.

Ключова част от апела на Django е скоростта на внедряване. Тъй като Django включва толкова много части, от които се нуждаете за разработване на средното уеб приложение, можете да се придвижите бързо. Маршрутизиране, анализиране на URL адреси, свързаност с база данни, включително ORM (обектно-релационен картограф), валидиране на формуляри, защита срещу атаки и шаблони са вградени.

Ще намерите градивни елементи за най-често срещаните сценарии на уеб приложения. Потребителското управление например се намира на повечето уебсайтове, така че Django го предлага като стандартен елемент. Вместо да се налага да създавате своя собствена система за проследяване на потребителски акаунти, сесии, пароли, влизания / излизания, администраторски разрешения и така нататък, Django предоставя тези функции първоначално. Те могат да се използват такива, каквито са, или разширени, за да обхванат нови случаи на употреба с минимална работа.

Django има разумни и безопасни настройки по подразбиране, които помагат да защитите вашето уеб приложение от атака. Когато поставите променлива в шаблон на страница, като низ с HTML или JavaScript, съдържанието не се изобразява буквално, освен ако изрично не посочите екземпляра на променливата като безопасен. Това само по себе си елиминира много често срещани проблеми със скриптове между сайтове. Ако искате да извършите проверка на формуляра, можете да използвате всичко - от обикновена CSRF защита до пълноценни механизми за проверка на полето, които връщат подробна обратна връзка за грешка.

Набор от функции, толкова богат и широк, колкото този на Django, не би бил много добър без надеждна документация. Документацията на Django разглежда всеки аспект на рамката от множество ъгли. Работа с Python 3 или други вкусове на езика, правилна защита, прилагане на общи компоненти на уеб приложения (като сесии или разбиване на страници), генериране на карти на сайта - всички те са покрити. API-тата за всеки слой на приложението - модел, изглед и шаблон - също са описани в детайли.

С голяма мощ обаче идва голяма сложност. Приложенията на Django имат репутацията на изключително тежки, изпълнени с много движещи се части. Дори обикновено приложение Django изисква доста конфигурация, за да стартира. Ако целта ви е да направите малко повече от настройването на няколко прости REST крайни точки, Django е почти сигурно прекалено.

Django също има своите странности. Например шаблоните на страници не могат да използват извикващи. Пример: Можете да предадете {{user.name}}като компонент в шаблон, но не {{user.get_name()}}. Това е един от начините, по които Django гарантира, че шаблоните не ви изстрелват по невнимание в крака, но тези ограничения могат да бъдат смущаващи, ако не сте подготвени за тях. Въпреки че има заобиколни решения, те са склонни да се отразят на представянето.

От версия 3.0, Django е добавил поддръжка за асинхронни изгледи. За съжаление все още няма поддръжка за асинхронизация в други части на стека Django, като ORM. Но можете да разположите Django с помощта на ASGI, за да се възползвате напълно от асинхронните изгледи.

Web2py

В света на програмирането на Ruby Ruby on Rails е де факто уеб рамката. Професорът по компютърни науки от университета DePaul Масимо Ди Пиеро е вдъхновен от Rails да създаде уеб рамка в Python, която е също толкова лесна за настройка и използване. Резултатът е Web2py.

Най-голямата атракция на Web2py е вградената среда за разработка. Когато настройвате екземпляр на Web2py, вие получавате уеб интерфейс, по същество онлайн редактор на приложения на Python, където можете да конфигурирате компонентите на приложението. Това обикновено означава създаване на модели, изгледи и контролери, всеки от които е описан чрез Python модули или HTML шаблони. Няколко примерни приложения идват с Web2py от кутията. Можете да ги разделите, за да видите как работят или да ги използвате като начални шаблони, за да създадете свои собствени приложения.

Разработчиците обикновено разполагат Web2py, като изтеглят изходния му код и надграждат върху това. Но за по-малко технически потребители на Windows или MacOS, създателите на Web2py предлагат версии, които по същество са самостоятелни сървъри. Изтеглете, разопаковайте и стартирайте една от тези версии и ще имате локален уеб сървър с вградено предварително конфигурирано копие на Web2py. Това е хубав начин да започнете да създавате приложение Web2py, което след това може да бъде разположено другаде, ако е необходимо.

Уеб интерфейсът на Web2py е изграден с Bootstrap 4, така че е лесен за очите и лесен за навигация. Редакторът в браузъра не може да замести пълноценната IDE, но е снабден с полезни помощни средства като номериране на редове и подчертаване на синтаксиса на Python (включително автоматично отстъпване). Включен е и бърз уеб интерфейс към обвивката на Python, така че можете да взаимодействате с Web2py от командния ред - добра отстъпка за експертите.

Системата за абстрахиране на данни, използвана в Web2py, работи малко по-различно от ORM на Django и други ORM, вдъхновени от нея (като Peewee). Тези системи използват Python класове за дефиниране на модели, докато Web2py използва конструкторски функции, като define_tableда създава екземпляри на модели. Разликите вероятно ще бъдат дразнещи само ако сте свикнали с другия начин; те не бива да измамят новодошлите. Няма вероятност да имате проблеми с свързването на Web2py с доставчик на данни, тъй като той разговаря с почти всяка основна съществуваща база данни.

Наистина полезна функция, свързана с база данни в Web2py, е възможността да се генерира диаграма на моделите, която ви позволява да визуализирате как вашите модели са свързани помежду си. Ще трябва да инсталирате библиотеката PyGraphviz, за да активирате тази функция.

Web2py предоставя много други компоненти от професионален клас: функции за интернационализация, множество методи за кеширане, контрол на достъпа и оторизация и дори ефекти от предния край (например инструмент за избор на дата във формуляри) чрез интегрирана поддръжка за jQuery и AJAX. Включени са и куки за външен и вътрешен междинен софтуер, въпреки че нямате право да използвате междинен софтуер, за да замените основните функции на Web2py. Все още обаче няма изрично използване на асинхронната функционалност на Python в Web2py, въпреки че има график за обработка на дълготрайни задачи. 

Не е чудно, че документацията на Web2py се нарича „книгата“. Първо, той обхваща зашеметяващо количество материали в Web2py, Python и средите за внедряване, използвани и за двете. Второ, написано е в изключително достъпен, разказен стил. Трето, той говори задълбочено за общи сценарии за изграждане на приложения. Има цяла глава, например, за използването на jQuery за изграждане на AJAX приложения.

Weppy

Weppy се чувства като половин път между минималната простота на Flask и пълнотата на Django. Докато разработването на приложение Weppy има директността на Flash, Weppy идва с много функции, открити в Django, като слоеве данни и удостоверяване. По този начин Weppy е подходящ за приложения, които варират от изключително прости до скромни.

На пръв поглед кодът Weppy изглежда много като код на колба или код на бутилка. Необходими са малко инструкции, за да се стартира основен уебсайт с еднопосочен маршрут. Маршрутите могат да бъдат описани чрез декоратори на функции (лесният начин) или програмно, а синтаксисът за това се приближава до Flask / Bottle. Шаблонирането работи приблизително по същия начин, освен малките вариации в синтаксиса.

Weppy контрастира с тези по-малки рамки, като включва някои функции, които те включват само като добавки или добавки. Например нито Flask, нито Bottle имат вградена ORM или система за управление на данни. Weppy включва ORM, макар и базиран на проекта pyDAL, а не далеч по-популярната SQLAlchemy. Weppy дори поддържа миграции на схеми, които Django поддържа като част от ORM (системата за миграция на Django също е много по-автоматизирана). Докато Weppy има механизъм за удължаване, списъкът на официално одобрените добавки е малък, далеч по-малък от каталога на разширенията за Flask.

По-леки рамки като Weppy често се използват за изграждане на RESTful API и Weppy се предлага с функции за удобство за тази цел. Поставете @serviceдекоратор по маршрут и данните, които връщате, автоматично се форматират в избрания от вас JSON или XML.

Weppy включва и други функции, които изглеждат по-съвпадащи с по-голяма рамка, но се изпълняват без групово. Примерите включват механизми за проверка на данни, обработка на формуляри, кеширане на отговори и проверка на потребителя. Във всички тези случаи Weppy възприема подхода „просто достатъчно“. Предоставените функции не са толкова пълни, колкото може да намерите в Django и други тежки рамки, но разработчикът не трябва да инвестира много работа, за да ги направи полезни и те винаги могат да бъдат разширени след факта.

Друга тежка рамкова функция, открита в Weppy, е подкрепата за интернационализация. Низовете в шаблоните могат да бъдат преведени според локалните файлове, предоставени с приложението, които са прости речници на Python. Изборът на език може да бъде зададен и чрез анализиране на заявката на браузъра (т.е. HTTP заглавката Accept-Language) или чрез свързване на превод към определен маршрут.

Документацията на Weppy има същия вкус като самата рамка. Той е чист, четим и написан, за да се консумира от хората. Освен обичайния пример за „здравей, свят“, той включва хубав урок за упътване, който ви позволява да създадете система за микроблогове като начален проект.

Дългосрочните планове за Weppy включват поддържане на асинхронизация и сокети като първокласни обекти на ниско ниво. Разработчиците на Weppy планират да въведат тези функции във версия 2.0 и след това да изискват Python 3.7 или по-добра версия за всички бъдещи версии на Weppy.

Зопе