Programovanie

Recenzia: Porovnáva sa 13 webových rámcov Pythonu

Ak vyvíjate webovú aplikáciu a vybrali ste si Python ako jazyk na jej zabudovanie, je to chytrý krok. Vďaka vyspelosti vývoja v Pythone, rozsiahlym knižniciam a šírke prijatia v reálnom svete je vývoj webu pre neho zjavným lákadlom.

Teraz prichádza tá ťažšia časť: Výber jedného z mnohých dostupných webových rámcov Pythonu. Nielenže počet stále rastie, ale môže byť ťažké nájsť ten, ktorý najlepšie vyhovuje vášmu prípadu použitia. Ak konštruujete rýchle a špinavé rozhranie REST API, nebudete potrebovať nikde v okolí inštalatérskych prác a káblov potrebných pre úplnú aplikáciu orientovanú na používateľa s prihlásením používateľa, overením formulára a manipuláciou s nahrávaním.

Súvisiace video: Vytvorenie jednoduchej webovej aplikácie pomocou Pythonu a Flask

V tomto súhrne preskúmame 13 najrozšírenejších webových rámcov Pythonu. Zaznamenáme, aké druhy webových aplikácií sú najvhodnejšie na vytváranie, a preskúmame, ako sa navzájom porovnávajú v týchto šiestich oblastiach:

Inštalácia: Aké ľahké alebo priame je nastavenie rámca - projekty, ktoré nevyžadujú formálnu inštaláciu (je možné ich jednoducho zahrnúť do existujúceho projektu ako zahrnutý modul), na začiatok vyžadujú minimálny štandardný štítok alebo prichádzajú s nejakým vopred nakonfigurovaným nastavením nastavenie získať body navyše.

Dokumentácia: Takmer každý slušný projekt v Pythone má dokumentáciu, ktorá prechádza nastavením, ilustruje základné prípady použitia a poskytuje podrobnosti o API. Tu dávame vyššie známky rámcom, ktoré ukazujú, ako vytvoriť celú aplikáciu ako súčasť tutoriálu, zahŕňajú bežné recepty alebo návrhové vzory a inak idú nad rámec výzvy (napríklad poskytnutím podrobností o tom, ako spustiť rámec pod variantom Pythonu ako PyPy alebo IronPython).

Zvládanie: Toto je relatívne skóre, ktoré naznačuje, koľko práce je potrebné na konfiguráciu a údržbu rámca. Minimálne rámce tu majú predvolene vyššie skóre.

Natívne schopnosti: Koľko batérií je súčasťou balenia? Vyššie skóre dosahujú rámce, ktoré poskytujú natívnu podporu internacionalizácie, šablónovanie HTML a vrstvu prístupu k údajom. Body smerujú aj do rámcov, ktoré natívne využívajú nedávno zavedenú natívnu podporu pre asynchrónne I / O operácie Pythonu.

Zabezpečenie: Rámec, ktorý poskytuje natívne bezpečnostné opatrenia, ako je ochrana proti falšovaniu požiadaviek medzi webmi (CSRF) a správa relácií so šifrovanými súbormi cookie, dostávajú vyššie známky.

Škálovateľnosť: Väčšina rámcov Pythonu môže na spustenie vo veľkom rozsahu využívať projekty ako Gevent alebo Gunicorn. Tu sa pozrieme na funkcie natívne v rámci, ktoré podporujú škálovateľnosť, ako napríklad výstup a ukladanie do fragmentov stránok.

Ak vás zaujímajú referenčné hodnoty výkonu, pozrite sa na prebiehajúcu sériu testov TechEmpower, ktoré porovnávajú rôzne webové rámce naprieč rôznymi úlohami, s kódom a metodikami zverejnenými na GitHub a podrobovanými neustálemu prehodnocovaniu. Nie všetky rámce v tejto diskusii sú analyzované tam, ale je možné získať dobrý prehľad o tom, ktoré rámce fungujú najlepšie pri akom druhu zaťaženia.

Celkovo sa pozrieme na 13 rámcov. Päť z nich - CubicWeb, Django, Web2py, Weppy a Zope2 - využíva prístup „kuchynského drezu“, ktorý obsahuje väčšinu funkcií, ktoré by ste si od webových aplikácií mohli predstaviť. Zvyšných osem rámcov - Bottle, CherryPy, Falcon, Flask, Pyramid, Tornado, Web.py a Wheezy.web - ponúka minimalistickejší vzhľad, hromadné obchodovanie a úplnosť pre jednoduchosť a ľahkosť.

Začnime s ťažkými váhami.

Ťažké webové rámce Pythonu

CubicWeb

CubicWeb je označovaný ako „sémantický rámec webových aplikácií, ktorý uprednostňuje opätovné použitie a objektovo orientovaný dizajn.“ Je to zaujímavý systém - ako poznamenal Rick Grehan, keď sa na to pozrel ešte v roku 2011 - ktorý zdôrazňuje použitie abstrakcií a opakovane použiteľných stavebných blokov kódu nazývaných „kocky“, ale pre niektorých vývojárov môže byť príliš abstraktný alebo výstredný.

Kocky sú softvérové ​​komponenty, ktoré obsahujú schému (údajový model), entity (logika programovania) a zobrazenia. Zostavením viacerých kociek, z ktorých každá plní svoju vlastnú úlohu, môžete zostaviť softvérové ​​aplikácie tak, že znovu použijete svoj vlastný kód a kód ostatných.

V jadre poskytuje CubicWeb základné lešenie používané každou webovou aplikáciou: „úložisko“ pre dátové pripojenia a ukladanie; „webový engine“ pre základné požiadavky / odpovede HTTP a akcie CRUD; a schéma na modelovanie údajov. To všetko je popísané v definíciách triedy Python. Pri nastavovaní a správe inštancií CubicWeb pracujete s nástrojom príkazového riadku podobným nástroju použitému pre Django.

Zdá sa, že CubicWeb nepoužíva natívnu asynchronizáciu Pythonu 3. Okružným spôsobom, ako zahrnúť async, by bolo použitie modulu cubicweb.pyramid na použitie rámca Pyramid ako webového servera a čerpanie z vidlice Pyramid, ktorá používa asynchrónne konštrukcie. Všetko priamočiarejšie sa však nateraz javí ako nedostupné.

Na načítanie alebo manipuláciu s perzistentnými dátami v aplikácii CubicWeb používate jazyk Relation Query Language (RQL), ktorý využíva neurčito syntax podobnú SQL, ale má vzor podľa SparQL W3C. Dôvodom CubicWebu je opäť abstrakcia: RQL poskytuje vysoko oddelenú cestu na vzájomné prepojenie rôznych zdrojov údajov. Ale keď sa to implementuje, bude sa to pravdepodobne zdať starodávnym vývojárom zvyknutým na ORM, ručnou konštrukciou dotazov ako reťazcov.

Používaniu CubicWeb bránia ďalšie prekážky. Pre jedného môže byť nastavenie problémom. Pretože CubicWeb má veľa závislostí, je najlepšie ho používať pip nainštalovať aby ich všetky priniesli. Možno budete musieť vykonať určité množstvo manuálneho doladenia v miestnom prostredí. To je v príkrom rozpore s ostatnými rámcami, kde beží pip nainštalovať alebo je potrebné vložiť kód rámca do podpriečinka iného projektu.

Ďalším potenciálnym problémom je absencia natívneho šablónového nástroja; generovanie HTML je ponechané na vývojára. Môžete to prekonať použitím šablónového systému tretej strany, ako je Jinja2, alebo výberom kocky, ktorá poskytuje nástroje pre webové používateľské rozhrania, napríklad pre rámec Boostrap HTML.

Jeden dlhoročný problém s CubicWeb - nedostatok podpory Pythonu 3 - bol vyriešený. Od júna 2016 a verzie 3.23 podpora Pythonu 3 pristála v aplikácii CubicWeb, s výnimkou modulov ako Twisted, ktoré samy o sebe nie sú úplne prenesené.

Rovnako ako Web2py, aj CubicWeb označuje svoju zdĺhavú dokumentáciu ako „kniha“. Vyžaduje si čas na vysvetlenie neobvyklého prístupu aplikácie CubicWeb, demonštruje, ako zostaviť niektoré základné aplikácie, obsahuje odkazy na API, a všeobecne vychádza v ústrety.

Django

Za desaťročie a zmeny, odkedy sa Django prvýkrát objavilo, sa stal jedným z najbežnejšie nasadených rámcov Pythonu na vytváranie webových aplikácií. Django sa dodáva s väčšinou každej batérie, ktorú budete potrebovať, takže sa viac prikláňa k vytváraniu veľkých aplikácií ako k malým.

Súvisiace video: Vytvorenie jednoduchého webu s Django

Po mnohých rokoch sedenia vo verzii 1.x Django nedávno urobil hrboľ verzie vľavo od desatinnej čiarky. Najväčšou zmenou v Django 2.0 je, že rámec teraz funguje iba s Pythonom 3.4 a vyšším. V ideálnom prípade by ste mali aj tak použiť Python 3.x, takže jediný dôvod, prečo používať vetvu 1.x v Djangu, je, ak narazíte na starú verziu Pythonu.

Kľúčovou súčasťou príťažlivosti Djanga je rýchlosť nasadenia. Pretože obsahuje toľko častí, ktoré potrebujete na vývoj priemernej webovej aplikácie, môžete sa rýchlo pohybovať. Smerovanie, analýza URL, pripojenie k databáze (vrátane ORM), overovanie formulárov, ochrana pred útokmi a šablóna sú integrované.

Nájdete stavebné prvky pre najbežnejšie scenáre webových aplikácií. Napríklad správu používateľov nájdete na väčšine webových stránok, takže Django ju ponúka ako štandardný prvok. Namiesto toho, aby ste si museli vytvárať svoj vlastný systém na sledovanie používateľských účtov, relácií, hesiel, prihlásení / odhlásení, správcovských povolení atď., Má Django tieto funkcie natívne. Môžu byť použité tak, ako sú, alebo rozšírené tak, aby zahŕňali nové prípady použitia s minimálnym počtom práce.

1. jadro je BSD; niektoré komponenty LGPLv3. 2. Dostupné cez zope.formlib; inštalované samostatne, ale podporované ako súčasť projektu. 3. K dispozícii prostredníctvom rozšírenia tretej strany.
 CubicWebDjangoWeb2pyWeppyZope2
LicenciaLGPLBSDLGPLv3BSD / LGPLv3 [1]Verejná licencia Zope
Natívny systém šablón HTMLÁnoÁnoÁnoÁnoÁno
Natívna správa ORM / údajovÁnoÁnoÁnoÁnoÁno
Knižnica rozšíreníÁnoÁnoÁnoÁnoÁno
Overenie formuláraÁnoÁnoÁnoÁnoÁno [2]
Ochrana viacerých stránok proti falšovaniuÁnoÁnoÁnoÁnoÁno
Správa používateľov / prístup na základe rolíÁnoÁnoÁnoÁnoÁno
Podpora Pythonu 3ÁnoÁnoNieÁnoNie
Migrácia schémy pre dátové modelyÁnoÁnoÁnoÁnoNie
Uloženie odpovede do pamäte cacheNieÁnoÁnoÁnoÁno
Podpora internacionalizácieÁnoÁnoÁnoÁnoÁno
Natívna podpora WebSocketsNieNie [3]ÁnoNieNie
Interaktívne vývojové prostredieÁnoNieÁnoNieÁno

Django má rozumné a bezpečné predvolené hodnoty, ktoré pomáhajú chrániť vašu webovú aplikáciu pred útokom. Keď umiestnite premennú do šablóny stránky, napríklad reťazec s formátom HTML alebo JavaScript, obsah sa nevykreslí doslovne, pokiaľ výslovne neurčíte inštanciu premennej ako bezpečnú. Toto samo osebe obmedzuje mnoho bežných problémov so skriptovaním medzi stránkami. Ak chcete vykonať overenie formulára, môžete použiť všetko od jednoduchej ochrany CSRF po plnohodnotné mechanizmy overovania jednotlivých polí, ktoré vracajú podrobnú spätnú väzbu o chybách.

Sada tak bohatých a širokých funkcií, aké ponúka Django, by bez robustnej dokumentácie k tomu nebola dobrá. Djangoov dokumentačný web vŕta do všetkých aspektov rámca z viacerých uhlov. Práca s Pythonom 3 alebo inými príchuťami jazyka, správne zabezpečenie, implementácia bežných komponentov webových aplikácií (ako sú relácie alebo stránkovanie), generovanie súborov Sitemap - všetko je obsiahnuté. Rovnako sú podrobne popísané API pre každú vrstvu aplikácie - model, zobrazenie a šablónu.

S veľkou silou však prichádza veľká zložitosť. Aplikácie Django majú povesť špičkových aplikácií s mnohými pohyblivými časťami. Aj jednoduchá aplikácia Django s iba niekoľkými trasami vyžaduje na spustenie poriadnu konfiguráciu. Ak je vašou úlohou neurobiť nič iné ako nastaviť niekoľko jednoduchých koncových bodov REST, Django je takmer určite prehnaný.

Django má tiež svoje zvláštnosti. Napríklad šablóny stránok nemôžu používať výzvy. Príklad: Môžete prihrať {{user.name}} ako komponent v šablóne, ale nie {{user.get_name ()}}. Je to jeden zo spôsobov, ako Django zaisťuje, že šablóny nechtiac nerobia škaredé veci, ale tieto obmedzenia môžu byť nepríjemné, ak na ne nie ste pripravení. Aj keď existujú riešenia, majú tendenciu vyberať si daň z výkonu.

Djangovo jadro je synchrónne. Jedným zo spôsobov pridania asynchrónneho správania je však projekt Django Channels. Tento projekt, oficiálny doplnok Django, pridáva asynchronné spracovanie pripojení a zásuviek k Djangu pri zachovaní programovacích idiómov Django.

Web2py

Vo svete Ruby je Ruby on Rails de facto webový rámec. Profesor počítačovej vedy z Univerzity DePaul Massimo Di Pierro sa inšpiroval Rails pri vytváraní webového rámca v Pythone, ktorý bolo podobne ľahké nastaviť a pracovať s ním. Výsledkom je Web2py.

Najväčším lákadlom Web2py je zabudované vývojové prostredie. Keď nastavujete inštanciu Web2py, poskytuje sa vám webové rozhranie, v podstate online editor aplikácií Pythonu, kde môžete konfigurovať komponenty aplikácie. To zvyčajne znamená vytváranie modelov, pohľadov a radičov, každý popísaný prostredníctvom modulov Python alebo šablón HTML. Niekoľko príkladov aplikácií sa dodáva s produktom Web2py po vybalení z krabice. Môžete ich rozdeliť a zistiť, ako fungujú, alebo ich využiť ako štartovacie šablóny na vytvorenie vlastných aplikácií.

Vývojári zvyčajne implementujú Web2py jednoduchým stiahnutím jeho zdrojového kódu a jeho použitím. Ale pre menej technických používateľov systému Windows alebo MacOS ponúkajú tvorcovia Web2py verzie, ktoré sú v podstate samostatnými servermi. Stiahnite si, rozbaľte a spustite jednu z týchto verzií a budete mať zabudovaný miestny webový server s predkonfigurovanou kópiou Web2py. Je to pekný spôsob, ako sa postaviť na nohy pri vytváraní aplikácie Web2py, ktorú potom môžete nasadiť inde podľa potreby.

Webové rozhranie Web2py bolo postavené na platforme Bootstrap 2.16.1, takže je ľahká pre oči aj pre ľahkú navigáciu. Editor v prehliadači nenahrádza plnohodnotné IDE, ale je vybavený užitočnými pomôckami, ako je číslovanie riadkov a zvýraznenie syntaxe Pythonu (vrátane automatického odsadenia). Zahrnuté je tiež rýchle webové rozhranie pre shell Pythonu, takže v prípade potreby môžete komunikovať s Web2py z príkazového riadku - pekný ústupok odborníkom.

Systém abstrakcie dát používaný v Web2py funguje trochu inak ako ORM od Django a od iných ORM inšpirovaných ním (napríklad Peewee). Tieto systémy používajú triedy Python na definovanie modelov, kde vo Web2py používate konštruktorské funkcie ako definova_tabulka na vytvorenie inštancie modelov. Väčšina z týchto rozdielov sa pravdepodobne prejaví iba u ľudí, ktorí už s jedným majú skúsenosti a začínajú používať druhý; pre nováčikov sú rovnako zložité. Pravdepodobne nebudete mať problémy s pripojením Web2py k poskytovateľovi údajov, pretože hovorí s takmer každou významnou databázou, ktorá existuje.

Skutočne užitočnou funkciou súvisiacou s databázou je schopnosť generovať diagram modelov, tým lepšie si môžete predstaviť, ako vaše modely navzájom súvisia. Aby ste túto funkciu povolili, budete si musieť nainštalovať knižnicu pygraphviz.

Web2py dodáva mnoho ďalších profesionálnych komponentov: internacionalizačné funkcie, viac metodík ukladania do pamäte cache, kontrolu a autorizáciu prístupu a dokonca aj front-end efekty (napríklad výber dátumu vo formulároch) prostredníctvom integrovanej podpory pre jQuery a AJAX. Zahrnuté sú tiež háky pre externý a interný middleware, aj keď nemáte oprávnenie používať middleware na nahradenie základných funkcií Web2py.

Jedno významné obmedzenie Web2py je, že je kompatibilný iba s Python 2.x. Pre jedného to znamená, že Web2py nemôže využívať asynchronnú syntax Python 3. Pre dvoch, ak sa spoliehate na externé knižnice, ktoré sú exkluzívne určené pre Python 3, máte smolu. V súčasnosti sa však pracuje na tom, aby bol produkt Web2py Python 3 kompatibilný, a od tohto písania je už veľmi blízko.

Niet divu, že sa dokumentácia spoločnosti Web2py označuje ako „kniha“. Najskôr pokrýva ohromujúce množstvo materiálu v prostredí Web2py, Python a v prostrediach nasadenia použitých pre oba typy. Po druhé, je písaný veľmi prístupným naratívnym štýlom. Po tretie, hovorí sa v nej do hĺbky o bežných scenároch vytvárania aplikácií. Celá kapitola je napríklad o používaní jQuery (dodávaného s Web2Py) na vytváranie aplikácií AJAX.

Weppy

Weppy sa cíti ako značka na polceste medzi minimálnou jednoduchosťou banky a úplnosťou Djanga. Zatiaľ čo vývoj aplikácie Weppy má priamočiarosť Flash, Weppy prichádza s mnohými funkciami nachádzajúcimi sa v Django, ako sú dátové vrstvy a autentifikácia. Weppy je teda vhodný pre aplikácie, ktoré sa pohybujú od extrémne jednoduchých až po mierne prepracované.

Na prvý pohľad vyzerá kód Weppy veľmi podobne ako kód Flask alebo Bottle. Na spustenie základnej webovej stránky s jednou cestou je potrebných niekoľko pokynov. Trasy je možné opísať pomocou dekoratérov funkcií (ľahkým spôsobom) alebo programovo a syntax ich vykonávania úzko súvisí s bankou / fľašou. Šablóny fungujú zhruba rovnako, až na malé odchýlky v syntaxi.

Weppy kontrastuje s ostatnými rámcami zahrnutím niektorých funkcií, ktoré integrujú iba ako doplnky alebo doplnky. Napríklad banka ani fľaša nemá zabudovaný systém ORM alebo systém správy údajov. Weppy obsahuje ORM, aj keď založený skôr na projekte pyDAL, ako na oveľa populárnejšom SQLAlchemy. Weppy dokonca podporuje migráciu schém, ktorú Django podporuje ako súčasť svojho ORM (taktiež migračný systém Django je oveľa automatizovanejší). Zatiaľ čo Weppy má mechanizmus rozšírenia, zoznam oficiálne schválených doplnkov je malý, oveľa menší ako katalóg rozšírení pre Flask.

Ľahšie rámce ako Weppy sa často používajú na vytváranie rozhraní RESTful API a Weppy je na tento účel vybavený pohodlnými funkciami. Umiestnite dekorátor @service na trasu a vrátené údaje sa automaticky naformátujú podľa vášho výberu formátu JSON alebo XML.

Weppy obsahuje ďalšie funkcie, ktoré sa zdajú byť viac v súlade s väčším rámcom, ale implementujú sa hromadne. Príklady: mechanizmy overovania údajov, spracovanie formulárov, ukladanie do pamäte cache odpovedí a overovanie používateľov. Vo všetkých týchto prípadoch uplatňuje Weppy prístup „akurát“. Poskytované funkcie nie sú také úplné, ako by ste mohli nájsť v rámci veľkosti Django, ale vývojár nemusí investovať veľa práce do toho, aby boli užitočné, a potom sa dajú kedykoľvek rozšíriť.

Ďalšou vlastnosťou, ktorá sa vo Weppy zvyčajne spája s rámcom väčšej váhy, je podpora internacionalizácie. Reťazce v šablónach je možné preložiť podľa súborov miestnych nastavení dodaných s aplikáciou, čo sú jednoduché slovníky Pythonu. Voľbu jazyka je možné nastaviť aj analýzou požiadavky prehliadača (tj. Hlavičky protokolu Accept-Language HTTP) alebo väzbou prekladu na konkrétnu cestu.

Dokumentácia Weppy má rovnakú príchuť ako samotný rámec. Je čistý, čitateľný a napísaný tak, aby ho ľudia konzumovali. Okrem obvyklého príkladu aplikácie „ahoj svět“ obsahuje aj pekný návod, ktorý vám umožní vytvoriť systém mikroblogovania ako štartovací projekt.

Dlhodobé plány pre Weppy zahŕňajú podporu asynchronizácie a zásuviek ako nízkoúrovňových, prvotriednych entít. Vývojári spoločnosti Weppy plánujú predstaviť tieto funkcie vo verzii 2.0 a potom vyžadovať pre všetky budúce verzie Weppy Python 3.7 alebo lepší.

Výsledková listinaNatívna schopnosť (20%) Zvládanie (20%) Inštalácia (20%) Dokumentácia (20%) Bezpečnosť (10%) Škálovateľnosť (10%) Celkové skóre (100%)
Fľaša 0,1281010877 8.6
CherryPy 17.0.0799988 8.4
CubicWeb 3.26.410871097 8.6
Django 2.11088101010 9.2
Falcon 1.4.17108877 8.0
Banka 1.0.2898988 8.4
Pyramída 1.9.28881097 8.4
Tornádo 4.3899887 8.3
Web.py 0,398810898 8.5
Web2py 2.16.110971098 8.9
Weppy 1.2.1110899109 9.1
Wheezy.web 0.1.485998888 8.4
Zope2 2.13.241087999 8.6
$config[zx-auto] not found$config[zx-overlay] not found