Python je zábavná hračka i děsivý plamenomet. Totéž platí pro to, co můžete dělat s Pythonem.
Python milují fandové, vědci i architekti.
Začít s ním je zatraceně snadné, má abstrakce vyššího řádu a možnosti metaprogramování pro budování velkých a složitých systémů a má spoustu knihoven, které umožňují dělat prakticky cokoliv. Jistě, existují omezení, pokud jde o souběžnost a silné psaní, ale můžete je obejít.
V tomto článku se podíváme na některé z nejlepších frameworků Pythonu, pokud jde o vytváření velkých i malých webových aplikací.
Table of Contents
Django
The Django framework obstál ve zkoušce času jako go-to web framework pro komunitu Python. Pokud byste ve spánku napadli vývojáře Pythonu a donutili je vytvořit webovou aplikaci se zbraní v ruce, automaticky by sáhli po Djangovi stejně jako Rubyista po Rails.
A má to dobrý důvod. Django je, jak říká slogan, „webový rámec pro perfekcionisty s termíny“. Je to to, čemu se říká rámec „včetně baterií“ (podobně jako Python je jazyk obsahující baterie), který poskytuje všechny běžné funkce ihned po vybalení.
S těmito zapečenými funkcemi Django výrazně zkracuje dobu vývoje:
- Šikovné a příjemné ORM s migracemi vytvořenými a aplikovanými automaticky rámcem.
- Lešení pro automatické generování admin panelu na základě vašich modelů.
- Podpora pro soubory cookie, relace, middleware, šablony atd.
- Bezpečnostní funkce jako XSS prevence, CRSF prevence atd. se aplikují automaticky.
- Funguje prakticky se všemi databázemi (je snadné najít adaptéry, kde oficiální podpora neexistuje)
- Prvotřídní podpora pro geografická data a prostorové dotazy GeoDjango
A mnohem, mnohem víc. Stačí říci, že Django je plnohodnotný, přátelský webový rámec.
Je Django pro vás?
Rozhodně ano.
Django má vynikající smysl pro všechny případy použití, ať už jde o rychlé prototypování nebo plánování podnikové aplikace. Jedinou hrubou hranou, na kterou narazíte, je struktura rámce. Protože se Django ohýbá dozadu, aby vám vývoj urychlil a usnadnil, vnucuje vývojáři svou strukturu (pojem zvaný „konvence nad konfigurací“), s čímž nemusíte souhlasit. Pokud například chcete nahradit Django ORM něčím jiným (řekněme SQL Alchemy), připravte se na překvapení.
Máte zájem stát se fullstack vývojářem s Django a Pythonem? – Podívejte se na toto fantastický online kurz.
Baňka
Zatímco Django zabírá téměř veškerý mindshare ve vývoji webu v Pythonu, Baňka je silným soupeřem.
Na rozdíl od Djanga je Flask „mikrorámec“, což znamená, že se soustředí na to, aby pár věcí bylo správné, a zbytek nechává na vás. Toto „zbytek je na vás“ může být zdrojem frustrace nebo radosti v závislosti na tom, jaké jsou vaše cíle. Pro ty, kteří vědí, co dělají, a chtějí s láskou vytvářet své webové aplikace výběrem komponent dle vlastního výběru, je Flask dar z nebes.
Baňka nabízí následující funkce:
- Směrování, šablonování, správa relací a další užitečné funkce.
- Plná podpora pro testování jednotek
- Minimální, zásuvná architektura
- Prvotřídní podpora REST
- Podpora pro Blueprints, jedinečný pohled na architekturu Flask pro malé webové aplikace
- Vyberte si balíčky pro ORM, migrace atd.
- Flexibilní struktura aplikací – umístěte své soubory tam, kde vám dávají největší smysl
- Statické poskytování souborů
- Vyhovuje WGSI
Je Flask pro vás?
Jak již bylo řečeno, Flask je minimální webový framework se vším rozděleným do jednotlivých komponent, které můžete vyměnit. Pokud na stavbu prototypu spěcháte, strávíte spoustu času triviálními rozhodnutími o databázi, struktuře složek, směrování atd., což se může ukázat jako kontraproduktivní. Flask funguje nejlépe, když pracujete na stabilním, seriózním projektu středního až velkého rozsahu, zejména REST API.
Láhev
Pokud jste si mysleli, že Flaskův přístup není dostatečně minimální a že byste přesto chtěli větší kontrolu, pozdravte ho Láhev.
Bottle se ještě více protahuje, až do bodu, kdy jedinou závislostí je standardní knihovna Pythonu. To znamená, že žádná pip instaluje toto nebo pip instaluje tamto, i když budete pravděpodobně muset zanedlouho. Zde je důvod, proč Bottle pro některé lidi vyniká:
- Jednosouborové nasazení. Ano, celá vaše aplikace je uložena v jediném souboru „.py“.
- Žádné externí závislosti. Pokud máte nainstalovanou správnou verzi Pythonu, můžete začít.
- Dodává svůj šablonovací engine, který lze vyměnit za Jinja2, Mako nebo Cheetah.
- Podpora formulářů, záhlaví, souborů cookie a nahrávání souborů.
- Vestavěný webový server, který lze snadno vyměnit.
Je láhev pro vás?
Pokud vytváříte opravdu malou aplikaci (řekněme méně než 500 řádků kódu) bez zvláštních požadavků, může vám Bottle dávat velký smysl. Je to naprostý ne-nesmyslný přístup k vytváření webových aplikací, ale v praxi zjistíte, že vám Bottle spíše překáží, než pomáhá. Důvodem je, že skutečný svět se neustále mění a než se nadějete. Nové požadavky padnou na vaši hlavu. V tu chvíli by se vše vkládat do jednoho souboru stalo oříškem.
Také, pokud si myslíte, že Bottle a Flask jsou téměř stejné, máte pravdu. Návrhy slučování ty dvě pocházejí z roku 2012 a souhlasí s tím i Armin, tvůrce Flasku. Marcel, tvůrce Bottle, však zachovává přísný ideologický rozdíl kvůli přístupu jednoho souboru a trvá na tom, aby oba zůstali odděleni.
Zope
Zope je to složité na vysvětlení, ale zkusím to. Ano, je to webový framework, pomocí kterého lze vytvářet velké i malé aplikace, ale to není vše. Zope je spíše platforma, která se skládá z nástrojů (včetně webových frameworků) vytvořených podle filozofie Zope a spravovaných Zope Corporation.
Zope má několik zajímavých komponent a funkcí vhodných pro vývoj podnikových aplikací:
- Architektura registrace a zjišťování komponent pro konfiguraci velké aplikace.
- ZODB — (jediná) objektová databáze pro Python pro nativní ukládání objektů.
- Plnohodnotný rámec a standardy pro systémy správy obsahu
- Sada rámců webových aplikací – ten kanonický se stále nazývá Zope, i když na něm bylo postaveno několik nových rámců (jako Grok).
- Přísné standardy pro vývoj, vydání a údržbu softwaru.
Je Zope pro vás?
Pokud hledáte vysoce strukturované prostředí pro vytváření opravdu velkých aplikací, Zope je dobrý. To znamená, že narazíte také na svůj spravedlivý podíl problémů. Zatímco se Zope stále vyvíjí, komunita je opravdu malá, a to do té míry, že o ní mnoho vývojářů Pythonu ani neslyšelo. Najít tutoriály a rozsáhlou dokumentaci je těžké, takže buďte připraveni na to, že budete hodně kopat (ačkoli komunita je opravdu užitečná!). Také vývojáři Pythonu, na které narazíte, se možná nebudou chtít naučit Zope a „rozředit“ své dovednosti.
TurboGears
TurboGears je vysoce flexibilní rámec, který má skutečně složitelnou architekturu. Je to rámec, který se škáluje podle vašich potřeb, a můžete jej použít k vytvoření jednosouborové aplikace nebo multi-tenancy behemot.
TurboGears má některé elegantní funkce, z nichž některé buď nejsou přítomné v populárních frameworkech (jako Django), nebo je těžké je vytvořit:
- Prvotřídní podpora pro více databází
- Vícedatabázové transakce
- Vysoce modulární – začněte s jedním souborem a škálujte jej tak, jak potřebujete
- Výkonný ORM (SQLAlchemy, který je vyspělejší a schopnější než Django’s ORM)
- Zásuvná architektura založená na specifikaci WSGI
- Vestavěná podpora pro sdílení databáze
- Funkčně řízené rozhraní na rozdíl od hlubokých, rigidních objektově orientovaných hierarchií.
Je TurboGears pro vás?
Pokud se chcete šťastně vyvíjet a chcete otestovaný, vyzrálý a robustní rámec mimo mediální hluk „úžasné, nové generace“ a toho všeho, TurboGears se skvěle hodí. V komunitě je vysoce respektován a má kompletní a rozsáhlou dokumentaci. Jistě, TurboGears není přesvědčený, což znamená, že počáteční nastavení a doba konfigurace může být delší, ale je to ideální rámec pro vývoj podnikových aplikací.
Web2py
Web2py začal jako hobby projekt a byl vydán v roce 2007. Jeho cílem je učinit vývoj webu snadným a dostupným pro každého.
Výsledkem je, že Web2py dovádí přístup nulové závislosti do extrému – nemá žádné požadavky, není co instalovat a obsahuje plnohodnotný webový editor pro vývoj, správu databází i nasazení.
Skoro si to můžete představit jako Android Studio, což je spíše kompletní prostředí než jen framework. Některé pěkné funkce, které Web2py má, jsou:
- Prakticky žádná křivka učení.
- Minimální jádro (pouze 12 objektů), které lze dokonce zapamatovat!
- Šablony Pure-Python
- Ochrana proti XSS, CSRF a dalším útokům
- Příjemné a konzistentní API
Je Web2py pro vás?
Web2py je stabilní a zábavný rámec, ale je těžké ho doporučit oproti jiným možnostem, jako je Django, Flask atd. Nejsou zde téměř žádné úlohy a příběh testování jednotek není skvělý. To znamená, že se vám může líbit rozhraní API kódu a celkový zážitek, který rámec nabízí, zejména pokud vytváříte rozhraní REST API.
CherryPy
CherryPy je další mikrorámec, jehož cílem je poskytnout základní funkčnost rámce a rychle sejít z cesty.
I když je to srovnatelné s jinými mikrorámci, jako je Flask, CherryPy se může pochlubit určitým rozdílem:
- Obsahuje vestavěný vícevláknový server (něco, co zůstává na seznamu přání Flask)
- (Jeden) webový server může hostovat více aplikací!
- Poskytujte svou aplikaci jako aplikaci WSGI (pro rozhraní s jinými aplikacemi WSGI) nebo jako prostý HTTP server (který funguje lépe)
- Prvotřídní podpora profilování a testování jednotek
- Běží na PyPy (pro skutečné nadšence výkonu), Jythonu a dokonce i na Androidu
CherryPy dělá tohle všechno a pak to, co byste od webového frameworku očekávali.
Je CherryPy pro vás?
Pokud většinou budujete služby RESTful, CherryPy je mnohem vážnější uchazeč než Flask. Je to deset let starý framework, který pěkně vyzrál a je vhodný pro malé i velké aplikace.
Sanic
Vzestup Node a jeho asynchronního programovacího modelu zanechal v mnoha komunitách pocit pozadu, včetně Pythonu. V reakci na to se na radaru objevila vlna asynchronních webových rámců, Sanic být jedním z nich.
Sanic je silně inspirován Flaskem, a to do té míry, že si vypůjčil dekorátory cest, plány a další základní hákové vlasce a ponořovače. A nestydí se to přiznat. To, co Sanic přináší, pokud jste fanouškem Flask, je skutečný neblokující I/O, který splňuje úrovně výkonu aplikace Node. Jinými slovy, Sanic je Flask s podporou async/wait!
Ve srovnání s CherryPy má Sanic neuvěřitelnou výkonnostní výhodu (jen si představte, jak by si vedl proti Flasku!). Podívejte se na následující výsledky testované společností DataWeave:
Jak můžete vidět, jakmile čísla souběžnosti začnou překračovat 50 za sekundu, CherryPy se prakticky dusí a vyvolává vysokou poruchovost.
Je Sanic pro vás?
Zatímco výkonnostní charakteristiky Sanic vyfouknou všechno ostatní z vody, nemusí to být nejlepší volba pro váš další projekt. Hlavním důvodem je nedostatek asynchronních knihoven. Převážná část existujících nástrojů a knihoven Pythonu byla napsána pro jednovláknovou verzi CPythonu, bez ohledu na vysokou souběžnost nebo asynchronní operace. Pokud například váš oblíbený ORM nepodporuje asynchronní operace, celý smysl používání Sanic bude zmařen.
Kvůli těmto důvodům vyspělosti a dostupnosti nebudeme v Pythonu zkoumat žádné další asynchronní rámce.
Masonite
Před chvílí jsem narazil na tento framework a myslel jsem si, že je to krok správným směrem. Od té doby byla vydána verze 2.0 a mám pocit, že konečně nastal čas dát Masonite trochu lásky.
Jednoduše řečeno, Masonite je Python verze Laravelu (slavný PHP framework, pokud byste to nevěděli). Proč na tom záleží? Záleží na tom, protože Laravel byl postaven na principech Ruby on Rails a společně tyto dva rámce umožňují vývojářům, kteří nejsou Ruby, zažít „Rails Way“ dělání věcí.
Vývojáři Laravelu (a do jisté míry i Rails) se budou cítit jako doma a budou v provozu doslova během okamžiku. Když jsem zkusil Masonite (a odeslal jsem problém nebo dva, včetně chyby!), byl jsem schopen vytvořit REST API s přesně nulovým myšlením, protože moje svalová paměť Laravel dělala všechno.
Masonite jako full-stack systém s bateriemi přináší několik zajímavých věcí:
- ORM ve stylu aktivního záznamu
- Migrace databáze (které na rozdíl od Django musí vytvořit vývojář)
- Výkonný IoC kontejner pro vkládání závislostí
- Vlastní CLI (nazývané „craft“) pro lešení a provozní úkoly
- Prvotřídní podpora pro testování jednotek
Největším „soupeřem“ pro Masonite je Django, protože komunita dělá vše, co je v jejích silách, aby uvedla na trh rámec jako snadný, příjemný a další velkou věc. Zda to předčí Djanga, to ukáže čas (když se mě ptáte, tak to má slušnou šmrnc), ale pro diskuzi o srovnání obou viz. tady a tady.
Je Masonite pro vás?
Masonite je ve srovnání s Djangem ještě dítě, takže ho nelze doporučit více než Django. To znamená, že pokud máte rádi věci Rails (nebo Laravel), oceníte, co Masonite nabízí. Je ideální pro rychlé vytváření prototypů, které potřebují vše předem nakonfigurované a snadno přepínatelné.
Závěr
Neexistuje žádný nedostatek rámců Python, velkých i malých. Zatímco pro malý projekt si můžete vybrat v podstatě cokoliv, podniková aplikace má požadavky, které jen málo z těchto frameworků dokáže splnit. Pokud se mě zeptáte, pro rozvoj podniku mě napadají Django (do určité míry), Zope a TurboGears. A i mezi těmi inklinuji k TurboGears.
To znamená, že každý architekt, který stojí za to, si může vyzvednout mikrorámeček a rozvinout svou architekturu. A to je do značné míry to, co se děje v praxi, což vysvětluje úspěch Flasku a podobných nápadů.
Pokud jste nováček, pak tento online kurz bylo by užitečné naučit se Python.
Dále prozkoumejte některé ze specializovaných Python frameworků pro vytváření API.