Programování

Recenze: Porovnáno 13 webových rámců Pythonu

Pokud vyvíjíte webovou aplikaci a vybrali jste si Python jako jazyk pro její zabudování, je to chytrý krok. Zralost vývoje Pythonu, robustní knihovny a šíře přijetí v reálném světě pomohly tomu, aby vývoj webu nepředstavoval žádný problém.

Nyní přichází ta těžká část: Výběr jednoho z mnoha dostupných webových rámců Pythonu. Nejen že počet stále roste, ale může být těžké najít ten, který nejlépe vyhovuje vašemu případu použití. Pokud vytváříte rychlé a špinavé rozhraní REST API, nebudete potřebovat nikde poblíž instalatérské práce a zapojení vyžadované pro úplnou aplikaci orientovanou na uživatele s přihlašováním uživatelů, ověřováním formulářů a zpracováním nahrávání.

Související video: Vytvoření jednoduché webové aplikace s Pythonem a Flaskem

V tomto přehledu prozkoumáme 13 nejrozšířenějších webových rámců Pythonu. Všimneme si, jaké druhy webových aplikací jsou nejvhodnější pro vytváření, a podíváme se, jak se hromadí proti sobě v těchto šesti oblastech:

Instalace: Jak snadné nebo přímočaré je nastavení rámce - projekty, které nevyžadují formální instalaci (lze je jednoduše vložit do existujícího projektu jako zahrnutý modul), vyžadují minimální základní desku, aby mohli začít, nebo přicházejí s nějakým předkonfigurovaným nastavení získat body navíc.

Dokumentace: Téměř každý slušný projekt v Pythonu má dokumentaci, která prochází nastavením, ilustruje základní případy použití a poskytuje podrobnosti o API. Tady dáváme vyšší známky rámcům, které ukazují, jak vytvořit celou aplikaci jako součást tutoriálu, zahrnují běžné recepty nebo návrhové vzory a jinak jdou nad rámec volání povinnosti (například poskytnutím podrobností o tom, jak spustit framework pod variantou Pythonu jako PyPy nebo IronPython).

Řízení: Toto je relativní skóre, které označuje, kolik práce je zapotřebí ke konfiguraci a údržbě rozhraní. Minimální rámce zde ve výchozím nastavení mají vyšší skóre.

Nativní funkce: Kolik baterií je součástí balení? Vyšší skóre získávají rámce, které poskytují nativní podporu internacionalizace, šablonování HTML a vrstvu přístupu k datům. Body také putují do frameworků, které nativně využívají nedávno zavedenou nativní podporu pro asynchronní I / O operace Pythonu.

Bezpečnostní: Rámec, který poskytuje nativní bezpečnostní opatření, jako je ochrana proti padělání žádostí mezi weby (CSRF) a správa relací se šifrovanými soubory cookie, získávají vyšší známky.

Škálovatelnost: Většina rámců Pythonu může využívat projekty jako Gevent nebo Gunicorn k provozování ve velkém. Zde se podíváme na funkce nativní v rámci, které podporují škálovatelnost, jako je výstup a ukládání do mezipaměti fragmentů stránek.

Pokud vás zajímají výkonnostní měřítka, podívejte se na pokračující sérii testů TechEmpower, které porovnávají více webových frameworků napříč různými úkoly, s kódem a metodikami zveřejněnými na GitHubu a podrobovaným neustálému přehodnocování. Ne všechny rámce v této diskusi jsou analyzovány tam, ale je možné získat dobrý pocit, které rámce fungují nejlépe za jakých druhů zatížení.

Podíváme se celkem na 13 rámců. Pět z nich - CubicWeb, Django, Web2py, Weppy a Zope2 - využívá přístup „kuchyňského dřezu“ a obsahuje většinu všech funkcí, které si dokážete představit pro webovou aplikaci. Zbývajících osm rámců - Bottle, CherryPy, Falcon, Flask, Pyramid, Tornado, Web.py a Wheezy.web - nabízí minimalističtější vzhled, objem a úplnost obchodování pro jednoduchost a snadnost.

Začněme s těžkými váhami.

Těžké webové rámce Pythonu

CubicWeb

CubicWeb je označován jako „sémantický rámec webových aplikací, který upřednostňuje opětovné použití a objektově orientovaný design.“ Jedná se o zajímavý systém - jak poznamenal Rick Grehan, když se na něj podíval již v roce 2011 - který zdůrazňuje použití abstrakcí a opakovaně použitelných stavebních bloků kódu zvaných „kostky“, ale pro některé vývojáře může být příliš abstraktní nebo výstřední.

Kostky jsou softwarové komponenty, které obsahují schéma (datový model), entity (logika programování) a pohledy. Sestavením více kostek, z nichž každá plní svůj vlastní úkol, můžete vytvářet softwarové aplikace opětovným použitím vlastního kódu a kódu ostatních.

Ve své podstatě poskytuje CubicWeb základní lešení používané každou webovou aplikací: „úložiště“ pro datová připojení a úložiště; „webový stroj“ pro základní požadavky / odpovědi HTTP a akce CRUD; a schéma pro modelování dat. To vše je popsáno v definicích tříd Pythonu. Chcete-li nastavit a spravovat instance CubicWeb, pracujete s nástrojem příkazového řádku podobným nástroji použitému pro Django.

Zdá se, že CubicWeb nepoužívá nativní asynchronní funkce Pythonu 3. Kruhový objezd způsob, jak zahrnout async, by bylo použít modul cubicweb.pyramid k použití rámce Pyramid jako webového serveru a čerpat z vidlice Pyramid, která používá asynchronní konstrukce. Zdá se však, že prozatím je něco přímějšího mimo dosah.

Chcete-li načíst nebo manipulovat s perzistentními daty v aplikaci CubicWeb, použijete Relation Query Language (RQL), který používá neurčitě syntaxi podobnou SQL, ale má vzor podle SparQL W3C. Důvodem pro CubicWeb je opět abstrakce: RQL poskytuje vysoce oddělenou cestu pro vzájemné propojení různých zdrojů dat. Ale jak je implementováno, tím, že budete ručně vytvářet dotazy jako řetězce, bude se pravděpodobně cítit zastaralý pro vývojáře zvyklé na ORM.

Při používání CubicWeb existují další překážky. Pro jednoho může být nastavení obtížné. Protože CubicWeb má mnoho závislostí, je nejlepší použít pip install načíst je všechny. Možná budete muset provést určité manuální vyladění v místním prostředí. To je v příkrém kontrastu s jinými rámci, kde běží pip install nebo je nutné vložit kód rámce do podsložky jiného projektu.

Dalším možným problémem je absence nativního šablony; generování HTML je ponecháno na vývojáře. Můžete to překonat použitím šablonového systému jiného výrobce, jako je Jinja2, nebo zvolením krychle, která poskytuje nástroje pro webová uživatelská rozhraní, například pro rámec Boostrap HTML.

Jeden dlouhodobý problém s CubicWeb - nedostatek podpory Pythonu 3 - byl vyřešen. Od června 2016 a verze 3.23 přistála podpora Pythonu 3 v CubicWebu, s výjimkou modulů jako Twisted, které samy nejsou plně portovány.

Stejně jako Web2py označuje CubicWeb svoji zdlouhavou dokumentaci jako „knihu“. Trvá čas vysvětlit neobvyklý přístup CubicWebu, ukazuje, jak sestavit některé základní aplikace, obsahuje odkazy na API a obecně jde o konkrétní cestu.

Django

V desetiletí a změnách od doby, kdy se Django poprvé objevil, se stal jedním z nejrozšířenějších rámců Pythonu pro vytváření webových aplikací. Django přichází s většinou každé baterie, kterou možná budete potřebovat, takže se více naklání k vytváření velkých aplikací než malých.

Související video: Vytvoření jednoduchého webu s Django

Po mnoha letech posezení u verze 1.x Django nedávno provedl bouli verzi nalevo od desetinné čárky. Největší změnou v Django 2.0 je, že framework nyní funguje pouze s Pythonem 3.4 a novějším. V ideálním případě byste měli stejně použít Python 3.x, takže jediným důvodem pro použití větve 1.x Django je, pokud narazíte na starou verzi Pythonu.

Klíčovou součástí přitažlivosti Djanga je rychlost nasazení. Protože obsahuje tolik kusů, které potřebujete pro vývoj průměrné webové aplikace, můžete se rychle pohybovat. Směrování, analýza URL, připojení k databázi (včetně ORM), ověřování formulářů, ochrana před útoky a šablon jsou integrovány.

Najdete stavební kameny pro nejběžnější scénáře webových aplikací. Například správu uživatelů najdete na většině webových stránek, takže ji Django nabízí jako standardní prvek. Místo toho, abyste museli vytvářet svůj vlastní systém pro sledování uživatelských účtů, relací, hesel, přihlášení / odhlášení, oprávnění správce atd., Má Django tyto funkce nativně. Mohou být použity tak, jak jsou, nebo rozšířeny tak, aby zahrnovaly nové případy použití s ​​minimálním množstvím práce.

1. Core je BSD; některé komponenty LGPLv3. 2. Dostupné prostřednictvím zope.formlib; instalován samostatně, ale podporován jako součást projektu. 3. K dispozici prostřednictvím rozšíření třetí strany.
 CubicWebDjangoWeb2pyWeppyZope2
LicenceLGPLBSDLGPLv3BSD / LGPLv3 [1]Veřejná licence Zope
Nativní HTML šablonový systémAnoAnoAnoAnoAno
Nativní správa ORM / datAnoAnoAnoAnoAno
Knihovna rozšířeníAnoAnoAnoAnoAno
Ověření formulářeAnoAnoAnoAnoAno [2]
Ochrana proti padělání mezi webyAnoAnoAnoAnoAno
Správa uživatelů / přístup na základě rolíAnoAnoAnoAnoAno
Podpora Pythonu 3AnoAnoNeAnoNe
Migrace schémat pro datové modelyAnoAnoAnoAnoNe
Ukládání odpovědí do mezipamětiNeAnoAnoAnoAno
Podpora internacionalizaceAnoAnoAnoAnoAno
Nativní podpora WebSocketsNeNe [3]AnoNeNe
Interaktivní vývojové prostředíAnoNeAnoNeAno

Django má rozumná a bezpečná výchozí nastavení, která pomáhají chránit vaši webovou aplikaci před útokem. Když umístíte proměnnou do šablony stránky, například řetězec s HTML nebo JavaScriptem, obsah se nevykreslí doslovně, pokud výslovně neoznačíte instanci proměnné jako bezpečnou. To samo o sobě omezuje mnoho běžných problémů se skriptováním mezi weby. Pokud chcete provést ověření formuláře, můžete použít vše od jednoduché ochrany CSRF až po plnohodnotné mechanismy ověření jednotlivých polí, které vracejí podrobnou zpětnou vazbu o chybách.

Sada funkcí, která je stejně bohatá a široká jako Django, by nebyla dobrá, kdyby k ní nebyla k dispozici robustní dokumentace. Dokumentační web Django se věnuje všem aspektům rámce z různých úhlů. Práce s Pythonem 3 nebo jinými příchutěmi jazyka, správné zabezpečení, implementace běžných komponent webových aplikací (jako jsou relace nebo stránkování), generování souborů Sitemap - vše je zahrnuto. Podrobně jsou popsány také API pro každou vrstvu aplikace - model, pohled a šablonu.

S velkou silou však přichází velká složitost. Aplikace Django mají pověst špičkových aplikací s mnoha pohyblivými součástmi. Dokonce i jednoduchá aplikace Django, která má jen pár tras, vyžaduje pro spuštění slušné množství konfigurace. Pokud je vaším úkolem nedělat nic jiného než nastavit několik jednoduchých koncových bodů REST, je Django téměř jistě přehnané.

Django má také své zvláštnosti. Šablony stránek například nemohou používat výzvy. Příklad: Můžete přihrát {{user.name}} jako součást šablony, ale ne {{user.get_name ()}}. Je to jeden ze způsobů, jak Django zajišťuje, že šablony nechtěně nedělají ošklivé věci, ale tato omezení mohou být nepříjemná, pokud na ně nejste připraveni. I když existují řešení, mají tendenci vybírat daň za výkon.

Djangoovo jádro je synchronní. Jedním ze způsobů přidání asynchronního chování je však prostřednictvím projektu Django Channels. Tento projekt, oficiální doplněk Django, přidává asynchronní zpracování připojení a soketů k Django při zachování programovacích idiomů Django.

Web2py

Ve světě Ruby je Ruby on Rails de facto webový rámec. Profesor počítačové vědy na univerzitě DePaul Massimo Di Pierro byl inspirován Rails k vytvoření webového rámce v Pythonu, který bylo podobně snadné nastavit a pracovat s ním. Výsledkem je Web2py.

Největším lákadlem Web2py je integrované vývojové prostředí. Když nastavíte instanci Web2py, získáte webové rozhraní, v podstatě online editor aplikací v Pythonu, kde můžete nakonfigurovat komponenty aplikace. To obvykle znamená vytváření modelů, pohledů a řadičů, z nichž každý je popsán pomocí modulů Pythonu nebo šablon HTML. Několik příkladů aplikací je dodáváno s Web2py ihned po vybalení z krabice. Můžete je rozdělit, abyste viděli, jak fungují, nebo je využít jako startovací šablony k vytváření vlastních aplikací.

Vývojáři obvykle nasazují Web2py jednoduše stažením jeho zdrojového kódu a jeho použitím. Ale pro méně technické uživatele systému Windows nebo MacOS nabízejí tvůrci Web2py verze, které jsou v zásadě samostatnými servery. Stáhněte si, rozbalte a spusťte jednu z těchto verzí a budete mít zabudovaný lokální webový server s předkonfigurovanou kopií Web2py. To je pěkný způsob, jak se přesvědčit o vytváření aplikace Web2py, kterou lze poté nasadit jinde podle potřeby.

Webové rozhraní Web2py bylo vytvořeno s Bootstrap 2.16.1, takže je snadné na pohled a snadnou navigaci. Editor v prohlížeči nenahrazuje plnohodnotné IDE, ale je vybaven užitečnými pomůckami, jako je číslování řádků a zvýraznění syntaxe Pythonu (včetně automatického odsazení). Zahrnuto je také rychlé webové rozhraní pro prostředí Python, takže můžete v případě potřeby komunikovat s Web2py z příkazového řádku - pěkný ústupek odborníkům.

Systém abstrakce dat používaný ve Web2py funguje trochu odlišně od ORM od Django a dalších ORM inspirovaných tímto systémem (například Peewee). Tyto systémy používají třídy Pythonu k definování modelů, kde ve Web2py používáte konstruktorové funkce jako tabulka_definice vytvořit instanci modelů. Většina těchto rozdílů se pravděpodobně projeví jen u lidí, kteří již mají s jedním zkušenost a začínají používat druhou; jsou pro nováčky stejně složité. Pravděpodobně nebudete mít potíže s připojením Web2py k poskytovateli dat, protože mluví téměř se všemi významnými databázemi, které existují.

Skutečně užitečnou funkcí související s databází je schopnost generovat diagram modelů, tím lépe vizualizovat vzájemný vztah vašich modelů. Abyste tuto funkci povolili, budete si muset nainstalovat knihovnu pygraphviz.

Web2py dodává mnoho dalších profesionálních komponent: funkce internacionalizace, více metod ukládání do mezipaměti, řízení přístupu a autorizaci a dokonce i front-endové efekty (například výběr data ve formulářích) prostřednictvím integrované podpory pro jQuery a AJAX. Zahrnuty jsou také háčky pro externí a interní middleware, i když není povoleno používat middleware k nahrazení základních funkcí Web2py.

Jedno významné omezení Web2py je, že je kompatibilní pouze s Pythonem 2.x. Pro jednoho to znamená, že Web2py nemůže využívat asynchronní syntaxi Pythonu 3. Za druhé, pokud se spoléháte na externí knihovny, které jsou exkluzivní pro Python 3, máte smůlu. Probíhají však práce na tom, aby byl Web2py Python 3 kompatibilní, a od tohoto psaní je to velmi blízko.

Není divu, že se dokumentace Web2py označuje jako „kniha“. Nejprve pokrývá ohromující množství materiálu v Web2py, Pythonu a prostředích nasazení použitých pro oba. Zadruhé, je napsán velmi přístupným narativním stylem. Za třetí, hovoří do hloubky o běžných scénářích vytváření aplikací. Celá kapitola je například o používání jQuery (dodávaného s Web2Py) k vytváření aplikací AJAX.

Weppy

Weppy se cítí jako značka na půli cesty mezi minimální jednoduchostí Flasku a úplností Djanga. Zatímco vývoj aplikace Weppy má přímočarost Flash, Weppy přichází s mnoha funkcemi v Django, jako jsou datové vrstvy a autentizace. Weppy je tedy vhodný pro aplikace, které se pohybují od extrémně jednoduchých až po mírně sofistikované.

Na první pohled vypadá kód Weppy velmi podobně jako kód Flask nebo Bottle. K zprovoznění základního webu s jedinou cestou je potřeba několik pokynů. Trasy lze popsat pomocí dekorátorů funkcí (snadná cesta) nebo programově a syntaxe pro to se blíží Flask / Bottle. Šablona funguje zhruba stejně, kromě menších variací v syntaxi.

Weppy kontrastuje s ostatními rámci tím, že zahrnuje některé funkce, které začleňují pouze jako doplňky nebo doplňky. Například Flask ani Bottle nemá vestavěný ORM nebo systém pro správu dat. Weppy obsahuje ORM, i když založenou spíše na projektu pyDAL než na mnohem populárnější SQLAlchemy. Weppy dokonce podporuje migraci schémat, které Django podporuje jako součást svého ORM (také migrační systém Django je mnohem automatizovanější). Zatímco Weppy má mechanismus rozšíření, seznam oficiálně schválených doplňků je malý, mnohem menší než katalog rozšíření pro Flask.

Lehčí rámce, jako je Weppy, se často používají k vytváření rozhraní RESTful API a Weppy je pro tento účel vybaven pohodlnými funkcemi. Umístěte dekorátor @ služby na trasu a data, která vrátíte, se automaticky naformátují podle vašeho výběru JSON nebo XML.

Weppy obsahuje další funkce, které se zdají více v souladu s větším rámcem, ale jsou implementovány bez hromadného zpracování. Příklady: Mechanismy ověřování dat, zpracování formulářů, ukládání do mezipaměti odpovědí a ověřování uživatelů. Ve všech těchto případech přistupuje Weppy k přístupu „jen dost“. Poskytované funkce nejsou tak úplné, jak byste mohli najít v rámci velikosti Django, ale vývojář nemusí investovat spoustu práce do toho, aby byly užitečné, a vždy je lze poté rozšířit.

Další funkcí, kterou Weppy obvykle spojuje s těžším rámcem, je podpora internacionalizace. Řetězce v šablonách lze přeložit podle souborů národního prostředí poskytovaných s aplikací, což jsou jednoduché slovníky Pythonu. Volbu jazyka lze také nastavit analýzou požadavku prohlížeče (tj. Hlavičkou HTTP Accept-Language) nebo vazbou překladu na konkrétní trasu.

Dokumentace Weppy má stejnou příchuť jako samotný rámec. Je čistý, čitelný a psaný tak, aby ho lidé mohli spotřebovat. Kromě obvyklého příkladu aplikace „hello world“ obsahuje pěkný návod, který vám umožní vytvořit systém mikroblogování jako spouštěcí projekt.

Dlouhodobé plány pro Weppy zahrnují podporu async a soketů jako nízkoúrovňových, prvotřídních entit. Vývojáři společnosti Weppy plánují tyto funkce zavést ve verzi 2.0 a poté vyžadovat pro všechny budoucí verze Weppy Python 3.7 nebo lepší.

ScorecardNativní schopnost (20%) Řízení (20%) Instalace (20%) Dokumentace (20%) Bezpečnostní (10%) Škálovatelnost (10%) Celkové skóre (100%)
Láhev 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
Baňka 1.0.2898988 8.4
Pyramida 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