8 sjajnih malih Python web okvira

Pogodnost i svestranost Pythona znače da se koristi za izradu softvera u gotovo svakom koraku IT života. Jedna od glavnih niša su web usluge, gdje Pythonova brzina razvoja i fleksibilne metafore olakšavaju brzo pokretanje i pokretanje web stranica.

I baš kao što možda pretpostavljate, Python vam nudi puno izbora i širine u mrežnim okvirima, i malim i velikim. Napokon, ne mora svaki web projekt biti na razini poduzeća. Većina bi trebala biti dovoljno velika da odradi posao, i ne veća. Ovaj članak istražuje osam najpoznatijih Python okvira koji ističu jednostavnost, laganu isporuku i uski fokus.

Boca

Boca bi se mogla smatrati vrstom mini-tikvice, jer je još kompaktnija i sažetija od one druge "mikrookvirke". Zbog svog minimalnog otiska, boca je idealna za uključivanje u druge projekte ili za brzu isporuku malih projekata poput REST API-ja. (O tikvici se govori u nastavku.) 

Cijela baza kodova za bocu stane u jednu datoteku i nema apsolutno nikakve vanjske ovisnosti. Unatoč tome, Bottle je opremljen s dovoljno funkcionalnosti za izgradnju uobičajenih vrsta web aplikacija bez oslanjanja na vanjsku pomoć.

Sustav usmjeravanja u Bottle, koji preslikava URL-ove u funkcije, ima gotovo potpuno istu sintaksu kao Flask. Ni vi niste ograničeni na ožičeni skup staza; možete ih stvoriti dinamički. Podaci o zahtjevima i odgovorima, kolačići, varijable upita, podaci obrasca iz POST akcije, HTTP zaglavlja i prijenosi datoteka mogu se pristupiti i manipulirati pomoću objekata u boci.

Svaka je sposobnost implementirana s pažnjom na detalje. Na primjer, kod prijenosa datoteka ne morate datoteku preimenovati ako se njezin ugovor o imenovanju sukobi s ciljnim datotečnim sustavom (kao što su kose crte u imenu u sustavu Windows). Boca to može učiniti za vas.

Bočica uključuje vlastiti jednostavni HTML mehanizam za predloške. Ponovno, iako minimalan, mehanizam za izradu predložaka ima sve najvažnije. Varijable uključene u predložak prema zadanim postavkama generiraju se sa sigurnim HTML-om; morate navesti koje su varijable sigurno reproducirati doslovno. Ako biste radije zamijenili Bottleov predložak za drugi, poput Jinja2, Bottle vam to omogućuje bez muke. Više volim sustav jednostavnih predložaka u paketu s bocom; brz je, sintaksa mu je nepretenciozna i omogućuje vam miješanje koda i teksta predloška bez nepotrebnih poteškoća.

Boca čak podržava i više pozadinskih poslužitelja. Dolazi sa vlastitim ugrađenim miniserverom za brzo testiranje, ali također će podržati generički WSGI, širok spektar WSGI kompatibilnih HTTP poslužitelja i obični stari CGI ako je potrebno.

Boca ne treba toliko dokumentacije kao drugi okviri, ali dokumenti nikako nisu oskudni. Sve ključne stvari mogu se smjestiti na jednu (iako dugu) web stranicu. Osim toga, pronaći ćete potpunu dokumentaciju za svaki API, primjere za razmještanje na raznim infrastrukturama, objašnjenje ugrađenog jezika za predloške i mnoštvo uobičajenih recepata.

Kao i kod Flaska, i na Bottleu možete proširiti funkcionalnost ručno ili putem dodataka. Dodaci za boce nisu ni približno toliko brojni kao Flask-ovi, ali postoje korisni dijelovi, poput integracije s raznim slojevima baze podataka i osnovne provjere autentičnosti korisnika. Kao podršku za asinkronizaciju, Bottle može koristiti jedan od postojećih prilagodnika poslužitelja koji se izvodi asinkrono, poput aiohttp / uvloop, ali async/awaitnije izvorno podržan.

Jedna od posljedica minimalizma boce jest da nekih predmeta jednostavno nema. Provjera obrasca, uključujući značajke poput zaštite CSRF (krivotvorenje zahtjeva za više web lokacija), nije uključena. Ako želite izraditi web aplikaciju koja podržava visok stupanj korisničke interakcije, morat ćete dodati tu podršku sami.

Još jedno pitanje s bocom je što je razvoj zastao; posljednje točko izdanje, 0,12, stiglo je 2013. Međutim, Boca se i dalje održava, a njegova razvojna izdanja ostaju korisna za proizvodnju. Programeri namjeravaju isporučiti nove verzije koje pružaju podršku za naslijeđena izdanja Pythona.

CherryPy

CherryPy postoji u ovom ili onom obliku gotovo 20 godina, ali nije izgubio minimalizam i eleganciju koji su ga razlikovali od samog početka.

Cilj koji stoji iza CherryPy-a, osim što sadrži samo gole bitove potrebne za posluživanje web stranica, jest osjećati se, koliko je to moguće, ne kao "mrežni okvir", već kao bilo koja druga vrsta Python aplikacije. Web mjesta poput Hulua i Netflixa koristila su CherryPy u proizvodnji jer okvir pruža vrlo nenametljivu osnovu za nadogradnju. CherryPy koristi udružene niti ispod haube, to bolje da podržava višenitne poslužiteljske adaptere.

CherryPy vam omogućuje da svoju web aplikaciju odvojite od osnovne logike. Da biste mapirali funkcije svoje aplikacije na URL-ove ili rute koje poslužuje CherryPy, stvorite klasu u kojoj se imenski prostori objekata izravno mapiraju na URL-ove koje želite poslužiti. Na primjer, korijen web stranice pruža funkcija nazvana "indeks". Parametri prosljeđeni tim funkcijama koriste se za rukovanje varijablama koje pružaju GET ili POST metode.

Komadići koje CherryPy uključuje trebali bi funkcionirati kao niskorazinski blokovi. Uključeni su identifikatori sesije i rukovanje kolačićima, ali HTML predložak nije. Poput Bottle, CherryPy nudi način mapiranja ruta do direktorija na disku za posluživanje statičkih datoteka.

CherryPy će se često odgoditi za postojeću biblioteku treće strane da podrži značajku, umjesto da je pruža izvorno. Primjerice, WebSocket aplikacije CherryPy ne podržava izravno, već putem knjižnice ws4py.

Dokumentacija za CherryPy uključuje praktičan vodič kroz razne aspekte programa. Neće vas provesti kroz cjelovitu end-to-end aplikaciju, za razliku od nekih drugih tutorijala iz okvira, ali svejedno je korisno. Dokumenti dolaze s korisnim bilješkama o postavljanju na virtualne hostove, obrnutom proksiranju putem Apachea i Nginxa i mnogim drugim scenarijima.

Sokol

Ako gradite API-je zasnovane na REST-u i ništa drugo, Falcon je stvoren samo za vas. Lean i brz, s gotovo nikakvim ovisnostima izvan standardne knjižnice, Falcon nudi sve što vam treba za REST API-je i ništa više. Falcon 2.0, objavljen 2019. godine, ukida podršku za Python 2.x i zahtijeva najmanje Python 3.5.

Veliki dio zašto Falcon zarađuje oznaku "lagana i vitka" nema veze s brojem linija koda u okviru. To je zato što Falcon aplikacijama ne nameće gotovo nikakvu vlastitu strukturu. Sve što aplikacija Falcon mora učiniti je naznačiti koje se funkcije preslikavaju na koje krajnje točke API-ja. Povratak JSON-a s krajnje točke uključuje malo više od postavljanja rute i vraćanja podataka putem json.dumpsfunkcije iz Pythonove standardne knjižnice. Podrška za async još nije došla u Falcon, ali radi se na tome da se to dogodi u Falconu 3.0.

Falcon također koristi pametne zadane postavke, tako da je za postavljanje potrebno malo petljanja. Na primjer, 404s se podižu prema zadanim postavkama za bilo koju rutu koja nije izričito deklarirana. Ako želite vratiti pogreške klijentu, možete podići jednu od brojnih iznimki dionica u paketu s okvirom (kao što je HTTPBadRequest) ili koristiti generičku falcon.HTTPErroriznimku. Ako vam je potrebna predobrada ili naknadna obrada rute, Falcon nudi i kuke za njih.

Falconov fokus na API-jevima znači da ovdje nema malo za izgradnju web aplikacija s konvencionalnim HTML korisničkim sučeljima. Na primjer, ne očekujte puno u načinu obrade obrazaca i CSRF alata za zaštitu. Ipak, Falcon nudi elegantne mogućnosti za proširenje svoje funkcionalnosti, tako da se mogu graditi sofisticiraniji predmeti. Osim gore spomenutog mehanizma za spajanje, pronaći ćete i sučelje za stvaranje međuopreme koje se može koristiti za umotavanje svih Falcon-ovih API-ja.

Dokumentacija za Falcon tanka je u usporedbi s drugim okvirima, ali samo zato što ima manje za obraditi. Korisnički vodič uključuje formalni detaljni opis svih glavnih značajki, zajedno s odjeljkom za brzi početak koji vam omogućuje pregled uzorka koda sa ili bez bilješki.

FastAPI

Ime FastAPI-a dobar je zbroj onoga što čini. Izgrađen je za brzo stvaranje API krajnjih točaka, a i brzo se izvodi.

FastAPI koristi projekt Starlette za njegovu mrežnu jezgru velike brzine, ali za upotrebu FastAPI-a ne morate znati o unutarnjim komponentama Starlette. Krajnje točke definirate na približno isti način kao aplikacija za tikvicu ili bocu - koristite dekoratere da naznačite koje funkcije obrađuju koje rute - i zatim vraćate rječnike koji se automatski prevode u JSON.

Možete jednostavno nadjačati način na koji se stvari vraćaju. Na primjer, ako želite vratiti HTML / XML s nekih krajnjih točaka, to možete učiniti jednostavnim vraćanjem prilagođenog Responseobjekta. Ako želite dodati prilagođeni međuopreme, možete ubaciti sve što slijedi ASGI standard. 

FastAPI koristi nagovještaj tipa Python kako bi pružio ograničenja na vrste podataka koje rute prihvaćaju. Na primjer, ako imate rutu s tipom Optional[int], FastAPI će odbiti sve prijave osim cijelih brojeva. Ne morate dodavati kôd za provjeru podataka u krajnje točke; možete samo koristiti savjete za tip i pustiti FastAPI da obavi posao.

Neke su stvari izostavljene. Na primjer, ne postoji izvorni HTML predložak, ali ne nedostaje rješenja trećih strana koja bi popunila tu prazninu. Isto je i s povezivanjem baze podataka, ali dokumentacija sadrži detalje o tome kako nagovoriti određene ORM-ove (npr. Peewee) da rade s FastAPI-jevim asinkrenim ponašanjem.

Tikvica

Mnoge rasprave o Python mrežnim okvirima započinju s Flaskom i to s dobrim razlogom. Tikvica je dobro uspostavljen, dobro razumljiv okvir koji je jednostavan za upotrebu i prilično stabilan. Gotovo je nemoguće pogriješiti pomoću Flaska za lagani web projekt ili osnovni REST API, no suočit ćete se s pokušajima ako pokušate izgraditi nešto veće.

Središnja privlačnost Flaska je niska prepreka ulasku. Osnovna aplikacija "hello world" može se postaviti u manje od 10 redaka Pythona. Flask uključuje široko korišteni HTML sustav predložaka, Jinja2, kako bi olakšao prikazivanje teksta, ali Jinja2 se može zamijeniti za bilo koji broj drugih mehanizama predložaka (kao što su Mustache) ili možete pokrenuti vlastiti.

U ime jednostavnosti, Flask izostavlja pojedinosti poput podatkovnog sloja ili ORM-a i ne nudi odredbe za provjeru valjanosti oblika. Međutim, Flask se može proširiti proširenjima, kojih ima na desetke, pokrivajući mnoge uobičajene slučajeve upotrebe kao što su predmemoriranje, rukovanje obrascima i provjera valjanosti te povezivanje baze podataka. Ovaj lean-by-default dizajn omogućuje vam pokretanje inženjerstva aplikacije Flask s apsolutnim minimumom funkcionalnosti, a zatim slojeve nanesite samo na dijelove koji su vam potrebni.

Dokumentacija tikvice je genijalna i laka za čitanje. Dokument za brzi početak izvrsno vas započinje, istovremeno objašnjavajući značaj zadanih izbora za jednostavnu aplikaciju Flask, a API dokumenti obiluju dobrim primjerima. Također je izvrsna kolekcija Flash isječaka, koji su brzi i prljavi primjeri kako se izvršavaju određeni zadaci, kao što je vraćanje objekta ako postoji ili pogreška 404 ako ne postoji.

Flask je dostigao svoju prekretnicu 1.0 u 2018. godini, a Python 2.6 i Python 3.3 su minimalno podržane verzije, a mnoga su njegova ponašanja konačno postavljena u kamen. Flask ne podržava izričito Pythonovu asinkronu sintaksu, ali za zadovoljenje te potrebe izdvojena je API kompatibilna varijanta Flaska pod nazivom Quart.

Piramida

Mala i lagana, Pyramid je vrlo pogodna za zadatke poput izlaganja postojećeg Python koda kao REST API-ja ili pružanja jezgre za web projekt u kojem programer radi većinu teških poslova.

"Piramida će vam omogućiti da brzo postanete produktivni i rasti će zajedno s vama", kaže dokumentacija. "Neće vas zadržavati kad je vaša aplikacija mala i neće vam stati na put kad aplikacija postane velika."

Dobar način za opisivanje Pyramidinog minimalizma bio bi "bez politike", pojam korišten u dijelu dokumentacije koji govori o tome kako se Pyramid oblikuje u odnosu na druge mrežne okvire. U osnovi, "bez politike" znači da bazu podataka ili jezik predloška koji odaberete koristiti nije briga Piramide.

Za izgradnju osnovne Pyramid aplikacije potrebno je vrlo malo rada. Kao i kod Boce i tikvice, aplikacija Pyramid može se sastojati od jedne datoteke Python, osim datoteka za sam okvir. Jednostavni jednosmjerni API zahtijeva ne više od desetak redaka koda. Većina toga su standardni uzorci from … importi postavljanje WSGI poslužitelja.

Prema zadanim postavkama Pyramid uključuje nekoliko stavki koje su uobičajene u web aplikacijama, ali pružaju se kao komponente za spajanje, a ne kao cjelovita rješenja. Podrška za korisničke sesije, na primjer, dolazi čak i s CSRF zaštitom. No, podrška za korisničke račune, kao što su prijave ili upravljanje računom, nije dio dogovora. Morat ćete ga sami zakotrljati ili dodati putem dodatka. Isto vrijedi i za rukovanje obrascima i veze s bazom podataka.

Pyramid čak nudi način za izradu predložaka iz prethodnih Pyramid projekata za ponovnu upotrebu prethodnog rada. Ovi predlošci, nazvani "skele", generiraju aplikaciju Pyramid s jednostavnim usmjeravanjem i nekim početnim HTML / CSS predlošcima. Paketi u paketu uključuju ogledni početni projekt i projekt koji se povezuje s bazama podataka putem popularne Python biblioteke SQLAlchemy.