Programování

8 skvělých malých webových rámců Pythonu

Pohodlí a univerzálnost Pythonu znamená, že se používá k vytváření softwaru téměř v každé oblasti života IT. Jedním z hlavních výklenků jsou webové služby, kde rychlost vývoje Pythonu a flexibilní metafory usnadňují rychlé zprovoznění webových stránek.

A jak asi uhodnete, Python vám nabízí spoustu možností a volnost ve webových rámcích, malých i velkých. Koneckonců, ne každý webový projekt musí být v podnikovém měřítku. Většina by měla být dostatečně velká, aby zvládla práci, a ne větší. Tento článek zkoumá osm nejznámějších rámců Pythonu, které zdůrazňují jednoduchost, odlehčené doručování a úzké zaměření.

Láhev

Láhev lze považovat za druh mini baňky, protože je ještě kompaktnější a výstižnější než ta jiná „mikrorámce“. Díky své minimální stopě je Bottle ideální pro zahrnutí do jiných projektů nebo pro rychlé dodání malých projektů, jako jsou REST API. (Baňka je popsána níže.)

Celá základna kódu pro Bottle se vejde do jednoho souboru a nemá absolutně žádné externí závislosti. Přesto je Bottle vybaven dostatkem funkcí pro vytváření běžných druhů webových aplikací, aniž by se spoléhal na pomoc zvenčí.

Směrovací systém v Bottle, který mapuje adresy URL na funkce, má téměř přesně stejnou syntaxi jako Flask. Nejste omezeni pouze na drátovou sadu cest; můžete je vytvářet dynamicky. K datům požadavků a odpovědí, cookies, proměnným dotazu, datům formulářů z akce POST, záhlaví HTTP a nahrávání souborů lze přistupovat a manipulovat je pomocí objektů v Bottle.

Každá funkce byla implementována s důrazem na detail. Například při nahrávání souborů nemusíte soubor přejmenovávat, pokud se jeho konvence pojmenování střetává s cílovým souborovým systémem (například lomítka v názvu v systému Windows). Láhev to může udělat za vás.

Bottle obsahuje vlastní jednoduchý HTML šablonovací modul. Znovu, i když minimální, má šablonový engine vše podstatné. Proměnné obsažené v šabloně jsou ve výchozím nastavení vykresleny bezpečným HTML; musíte určit, které proměnné lze bezpečně reprodukovat doslovně. Pokud byste raději vyměnili Bottleův šablonový modul za jiný, například Jinja2, Bottle vám to umožní bez rozruchu. Preferuji systém jednoduchých šablon dodávaný s Bottle; je rychlý, jeho syntaxe je nenáročná a umožňuje vám bez zbytečných obtíží míchat kód a text šablony.

Bottle dokonce podporuje více serverů. Dodává se s vlastním vestavěným miniserverem pro rychlé testování, ale také bude podporovat obecný WSGI, širokou škálu serverů HTTP kompatibilních s WSGI a v případě potřeby i starý starý CGI.

Bottle nepotřebuje tolik dokumentace jako jiné rámce, ale dokumenty v žádném případě nejsou skrovné. Všechny důležité věci se vejdou na jednu (i když dlouhou) webovou stránku. Kromě toho najdete úplnou dokumentaci ke každému API, příklady nasazení na různé infrastruktury, vysvětlení vestavěného templatingového jazyka a spoustu běžných receptů.

Stejně jako u Flask můžete rozšiřovat funkčnost Bottle ručně nebo prostřednictvím zásuvných modulů. Bottle plug-iny nejsou zdaleka tak početné jako Flask's, ale existují i ​​užitečné kousky, jako je integrace s různými databázovými vrstvami a základní autentizace uživatelů. Pro podporu async může Bottle použít jeden ze stávajících serverových adaptérů, které běží asynchronně, například aiohttp / uvloop, ale asynchronní / čekat není nativně podporováno.

Jedním z důsledků Bottleova minimalismu je, že některé položky tam prostě nejsou. Ověření formuláře, včetně funkcí, jako je ochrana CSRF (padělání žádostí napříč weby), není zahrnuto. Pokud chcete vytvořit webovou aplikaci, která podporuje vysokou míru interakce s uživatelem, budete si ji muset přidat sami.

Dalším problémem Bottle je, že vývoj se zastavil; poslední bodové vydání, 0,12, dorazilo v roce 2013. To znamená, že Bottle se nadále udržuje a jeho vývojová vydání zůstávají použitelná pro produkci. Vývojáři mají v úmyslu dodat nové verze, které zbaví podpory starších vydání Pythonu.

CherryPy

CherryPy existuje v té či oné podobě téměř 20 let, ale neztratil minimalismus a eleganci, které ji od začátku odlišovaly.

Cílem CherryPy, kromě toho, aby obsahoval pouze holé bity potřebné k poskytování webových stránek, je cítit se pokud možno ne jako „webový rámec“, ale jako jakýkoli jiný druh aplikace v Pythonu. Weby jako Hulu a Netflix při produkci používaly CherryPy, protože rámec poskytuje velmi nenápadnou základnu, na které lze stavět. CherryPy používá sdružená vlákna pod kapotou, tím lépe podporuje vícevláknové serverové adaptéry.

CherryPy vám umožní udržet vaši webovou aplikaci odděleně od základní logiky. Chcete-li namapovat funkce vaší aplikace na adresy URL nebo trasy obsluhované CherryPy, vytvoříte třídu, kde se obory názvů objektů mapují přímo na adresy URL, které chcete zobrazovat. Například kořen webu je poskytován funkcí s názvem „index“. Parametry předávané těmto funkcím se používají ke zpracování proměnných poskytovaných metodami GET nebo POST.

Bity, které CherryPy obsahuje, mají fungovat jako stavební bloky nízké úrovně. Identifikátory relace a zpracování souborů cookie jsou zahrnuty, ale šablonování HTML není. Stejně jako Bottle nabízí CherryPy způsob, jak mapovat trasy do adresářů na disku pro poskytování statických souborů.

CherryPy se často odloží na existující knihovnu třetí strany, aby podporovala funkci, místo aby ji poskytovala nativně. Například aplikace WebSocket nejsou podporovány CherryPy přímo, ale prostřednictvím knihovny ws4py.

Dokumentace pro CherryPy obsahuje praktický výukový program s různými aspekty programu. Na rozdíl od některých jiných výukových programů pro rozhraní vás neprovede kompletní end-to-end aplikací, ale je to stále užitečné. Dokumenty přicházejí s praktickými poznámkami o nasazení ve virtuálních hostitelích, reverzním proxy serverem přes Apache a Nginx a mnoha dalšími scénáři.

Sokol

Pokud vytváříte rozhraní API založená na REST a nic jiného, ​​Falcon byl vytvořen právě pro vás. Štíhlý a rychlý, s téměř žádnými závislostmi nad rámec standardní knihovny, Falcon poskytuje vše, co potřebujete pro REST API a nic víc. Falcon 2.0, vydaný v roce 2019, nepodporuje podporu Pythonu 2.xa vyžaduje alespoň Python 3.5.

Velká část toho, proč Falcon vydělává štítek „light and slender“, má málo společného s počtem řádků kódu v rámci. Je to proto, že Falcon neukládá aplikacím téměř žádnou vlastní strukturu. All Falcon application has to do is indicate which functions map to which API endpoints. Vrácení JSON z koncového bodu zahrnuje něco víc než nastavení trasy a vrácení dat prostřednictvím json.dumps funkce ze standardní knihovny Pythonu. Podpora pro async zatím ve Falconu nepřistála, ale pracuje se na tom, aby se to ve Falconu 3.0 stalo.

Falcon také používá rozumné výchozí nastavení, takže je potřeba jen málo vrtání. Například 404 se ve výchozím nastavení zvýší pro jakoukoli trasu, která není výslovně deklarována. Pokud chcete vrátit chyby klientovi, můžete vyvolat jednu z řady výjimek akcií dodávaných s frameworkem (například HTTPBadRequest) nebo použijte obecný falcon.HTTPError výjimka. Pokud potřebujete předzpracování nebo následné zpracování trasy, Falcon poskytuje háčky i pro ty.

Zaměření společnosti Falcon na API znamená, že je tu málo pro vytváření webových aplikací s běžnými uživatelskými rozhraními HTML. Například neočekávejte příliš mnoho funkcí zpracování formulářů a nástrojů ochrany CSRF. To znamená, že Falcon poskytuje elegantní možnosti pro rozšíření své funkčnosti, takže lze stavět sofistikovanější položky. Kromě výše zmíněného mechanismu hákování najdete rozhraní pro vytváření middlewaru, které lze použít k zabalení všech rozhraní API společnosti Falcon.

Dokumentace pro Falcon je štíhlá ve srovnání s jinými rámci, ale jen proto, že je toho méně k pokrytí. Uživatelská příručka obsahuje formální krok za krokem všechny hlavní funkce spolu s částí pro rychlý start, která vám umožní zobrazit ukázkový kód s anotací nebo bez ní.

FastAPI

Název FastAPI je dobrým shrnutím toho, co dělá. Je vytvořen pro rychlé vytváření koncových bodů API a také běží rychle.

FastAPI využívá projekt Starlette pro své vysokorychlostní síťové jádro, ale abyste mohli FastAPI používat, nepotřebujete vědět o interních prostředích Starlette. Koncové body definujete téměř stejným způsobem jako aplikaci Flask nebo Bottle - pomocí dekorátorů označte, které funkce zpracovávají které trasy - a poté vraťte slovníky, které jsou automaticky přeloženy do formátu JSON.

Jak lze věci vrátit, můžete snadno přepsat. Například pokud chcete vrátit HTML / XML z některých koncových bodů, můžete to udělat jednoduše vrácením vlastního Odezva objekt. Pokud chcete přidat vlastní middleware, můžete zobrazit vše, co odpovídá standardu ASGI.

FastAPI využívá nápovědu typu Pythonu k zajištění omezení druhů dat, která směry přijímají. Například pokud máte trasu s tímto typem Volitelné [int]„FastAPI odmítne jakékoli příspěvky kromě celých čísel. K vašim koncovým bodům nemusíte přidávat ověřovací kód dat; stačí použít tipy typu a nechat FastAPI pracovat.

Přirozeně jsou některé věci vynechány. Například neexistuje žádný nativní modul šablon HTML, ale není tu nedostatek řešení třetích stran, které by tuto mezeru zaplnily. Totéž s připojením k databázi, ale dokumentace obsahuje podrobnosti o tom, jak přimět určité ORM (např. Peewee) k práci s asynchronním chováním FastAPI.

Baňka

Mnoho diskusí o webových rámcích Pythonu začíná Flaskem, a to z dobrého důvodu. Baňka je dobře zavedený, dobře srozumitelný rámec, který se snadno používá a je docela stabilní. Je téměř nemožné pokazit se pomocí Flask pro lehký webový projekt nebo základní REST API, ale pokud se pokusíte postavit něco většího, budete čelit těžké práci.

Centrální přitažlivost baňky je její nízká překážka vstupu. Základní aplikaci „hello world“ lze nastavit na méně než 10 řádcích Pythonu. Flask obsahuje široce používaný systém šablon HTML Jinja2, který usnadňuje vykreslování textu, ale Jinja2 lze vyměnit za libovolný počet dalších šablonových motorů (například Moustache) nebo si můžete vytvořit vlastní.

V názvu jednoduchosti Flask vynechává drobnosti, jako je datová vrstva nebo ORM, a nenabízí žádná opatření pro ověřování formulářů. Flask však lze rozšířit prostřednictvím rozšíření, kterých je tu desítek a které pokrývají mnoho běžných případů použití, jako je ukládání do mezipaměti, zpracování a ověřování formulářů a připojení k databázi. Tento design lean-by-default vám umožní začít s vývojem aplikace Flask s absolutním minimem funkčnosti, poté můžete vrstvit pouze ty části, které potřebujete, když je potřebujete.

Flaskova dokumentace je geniální a snadno čitelná. Dokument pro rychlý start dělá skvělou práci, jak začít, a zároveň vysvětluje význam výchozích možností pro jednoduchou aplikaci Flask a dokumenty API jsou plné dobrých příkladů. Vynikající je také sbírka úryvků Flash, které jsou rychlými a špinavými příklady toho, jak splnit konkrétní úkoly, například jak vrátit objekt, pokud existuje, nebo chyba 404, pokud tomu tak není.

Flask dosáhl svého milníku verze 1.0 v roce 2018, přičemž minimální podporované verze byly Python 2.6 a Python 3.3 a mnoho z jeho chování se nakonec stalo kamenem. Flask výslovně nepodporuje asynchronní syntaxi Pythonu, ale k uspokojení této poptávky byla vypuštěna variace Flask kompatibilní s API s názvem Quart.

Pyramida

Malý a lehký, Pyramid je vhodný pro úkoly, jako je vystavení existujícího kódu Pythonu jako REST API nebo poskytnutí jádra pro webový projekt, kde vývojář dělá většinu těžkého zvedání.

„Pyramid vám umožní rychle se stát produktivními a bude s vámi růst,“ říká dokumentace. "Nebude vás brzdit, když je vaše aplikace malá, a nebude vám překážet, když se vaše aplikace zvětší."

Dobrým způsobem, jak popsat Pyramidův minimalismus, by bylo „bez politiky“, což je termín používaný v části dokumentace, která pojednává o tom, jak se Pyramid utváří proti jiným webovým rámcům. V zásadě „bez zásad“ znamená, že databáze nebo jaký šablonový jazyk, který se rozhodnete použít, se pyramidové práce netýká.

K vytvoření základní aplikace Pyramid je zapotřebí jen velmi málo práce. Stejně jako u Bottle a Flask se aplikace Pyramid může skládat z jediného souboru Pythonu, kromě souborů pro samotný rámec. Jednoduché jednosměrné API nevyžaduje více než tucet řádků kódu. Většina z toho je podobná od… import příkazy a nastavení serveru WSGI.

Ve výchozím nastavení obsahuje Pyramid několik položek, které jsou běžné ve webových aplikacích, ale jsou poskytovány jako komponenty, které se mají spojit dohromady, nikoli jako plnohodnotné řešení. Například podpora relací uživatelů dokonce přichází s ochranou CSRF. Podpora uživatelských účtů, jako jsou přihlášení nebo správa účtů, však není součástí dohody. Budete si jej muset sami přehrát nebo přidat pomocí pluginu. Totéž platí pro zpracování formulářů a připojení k databázi.

Pyramid dokonce poskytuje způsob, jak vytvořit šablony z předchozích projektů Pyramid a znovu použít předchozí práci. Tyto šablony, nazývané „lešení“, generují aplikaci Pyramid s jednoduchým směrováním a některými počátečními šablonami HTML / CSS. Dodávaná lešení zahrnují ukázkový startovací projekt a projekt, který se připojuje k databázím prostřednictvím populární pythonovské knihovny SQLAlchemy.

$config[zx-auto] not found$config[zx-overlay] not found