Programiranje

8 odličnih malih spletnih okvirov Python

Priročnost in vsestranskost Pythona pomenita, da se uporablja za izdelavo programske opreme v skoraj vsakem krogu IT življenja. Ena glavnih niš so spletne storitve, kjer Pythonova hitrost razvoja in prilagodljive metafore omogočajo hitro pripravo in delovanje spletnih strani.

In kot lahko uganite, vam Python ponuja veliko izbire in širine v spletnih okvirih, tako majhnih kot velikih. Navsezadnje ni treba, da je vsak spletni projekt na ravni podjetja. Večina bi morala biti ravno dovolj velika, da se delo opravi, in ne večja. Ta članek raziskuje osem najbolj znanih ogrodjev Python, ki poudarjajo preprostost, lahko dostavo in težek poudarek.

Steklenica

Steklenico bi lahko šteli za nekakšno mini bučko, saj je še bolj kompaktna in jedrnata kot tista druga "mikrookvirja". Zaradi majhnega odtisa je steklenica idealna za vključitev v druge projekte ali za hitro dostavo manjših projektov, kot so API-ji REST. (Bučka je obravnavana spodaj.)

Celotna baza kod za steklenico se prilega eni datoteki in nima popolnoma nobenih zunanjih odvisnosti. Kljub temu je Bottle opremljen z dovolj funkcionalnosti za izdelavo običajnih vrst spletnih aplikacij, ne da bi se zanašal na zunanjo pomoč.

Sistem usmerjanja v steklenici, ki preslika URL-je v funkcije, ima skoraj popolnoma enako sintakso kot Flask. Tudi vi niste omejeni na trdno ožičen nabor poti; lahko jih ustvarite dinamično. Podatki o zahtevah in odgovorih, piškotki, spremenljivke poizvedb, podatki obrazcev iz dejanja POST, glave HTTP in prenosi datotek so dostopni in manipulirani s pomočjo predmetov v steklenički.

Vsaka zmogljivost je bila izvedena z dobro pozornostjo do podrobnosti. Pri nalaganju datotek vam na primer ni treba preimenovati datoteke, če se njena konvencija o poimenovanju ne ujema s ciljnim datotečnim sistemom (na primer poševnice v imenu v sistemu Windows). Steklenica lahko to stori za vas.

Steklenica vključuje svoj preprost mehanizem za predloge HTML. Še enkrat, čeprav minimalen, ima mehanizem za predloge vse bistveno. Spremenljivke, vključene v predlogo, so privzeto upodobljene z varnim HTML-jem; navesti morate, katere spremenljivke je varno reproducirati dobesedno. Če raje zamenjate motor za predloge Bottle za drugega, na primer Jinja2, vam Bottle to omogoča brez težav. Raje imam sistem preproste predloge, priložen steklenici; je hiter, njegova sintaksa je nezahtevna in vam omogoča, da brez nepotrebnih težav vmešate besedilo kode in besedila predloge.

Steklenica podpira celo več hrbtnih strani strežnika. Prihaja z lastnim vgrajenim miniserverjem za hitro testiranje, podpira pa tudi generični WSGI, široko paleto strežnikov HTTP, združljivih z WSGI, in po potrebi navaden star CGI.

Steklenica ne potrebuje toliko dokumentacije kot drugi okviri, vendar dokumenti nikakor niso skopi. Vse ključne stvari sodijo na eno (čeprav dolgo) spletno stran. Poleg tega boste našli popolno dokumentacijo za vsak API, primere za uvajanje v različne infrastrukture, razlago vgrajenega predloge in množico pogostih receptov.

Tako kot pri Flasku lahko tudi pri Bottle funkcijo razširite ročno ali prek vtičnikov. Vtičniki za steklenice niso tako številni kot Flask, vendar obstajajo koristni deli, na primer integracija z različnimi sloji baze podatkov in osnovno preverjanje pristnosti uporabnika. Za async podporo lahko Bottle uporabi enega od obstoječih strežniških vmesnikov, ki deluje asinhrono, na primer aiohttp / uvloop, vendar async / await ni domače podprt.

Posledica minimalizma Bottle je ta, da nekaterih predmetov preprosto ni. Preverjanje obrazca, vključno s funkcijami, kot je zaščita CSRF (ponarejanje zahtev na več mestih), ni vključeno. Če želite zgraditi spletno aplikacijo, ki podpira visoko stopnjo interakcije uporabnika, jo boste morali dodati sami.

Druga težava pri Bottle je, da se je razvoj ustavil; zadnja izdaja točke, 0,12, je prispela leta 2013. Bottle se še naprej ohranja in njene razvojne različice ostajajo uporabne za proizvodnjo. Razvijalci nameravajo dostaviti nove različice, ki ponujajo podporo za stare izdaje Pythona.

CherryPy

CherryPy obstaja v takšni ali drugačni obliki že skoraj 20 let, vendar od začetka ni izgubil minimalizma in elegance.

Cilj CherryPy-ja, poleg tega, da vsebuje le prazne dele, ki so potrebni za strežbo spletnih strani, je, kolikor je mogoče, počutiti se ne kot "spletni okvir", temveč kot katera koli druga vrsta Pythonove aplikacije. Strani, kot sta Hulu in Netflix, so v proizvodnji uporabljale CherryPy, ker ogrodje zagotavlja zelo nevsiljivo podlago za nadgradnjo. CherryPy uporablja združene niti pod pokrovom, bolje podpira večnitne strežniške vmesnike.

CherryPy vam omogoča, da svojo spletno aplikacijo ločite od osnovne logike. Če želite funkcije aplikacije preslikati na URL-je ali poti, ki jih ponuja CherryPy, ustvarite razred, v katerem se imenski prostori predmetov preslikajo neposredno na URL-je, ki jih želite prikazati. Koren spletnega mesta je na primer na voljo s funkcijo "index". Parametri, posredovani tem funkcijam, se uporabljajo za obdelavo spremenljivk, ki jih zagotavljajo metode GET ali POST.

Deli, ki jih vključuje CherryPy, naj bi delovali kot gradniki nizke ravni. Vključeni so identifikatorji sej in obdelava piškotkov, predloge HTML pa ne. Tako kot Bottle tudi CherryPy ponuja način preslikave poti v imenike na disku za statično strežbo datotek.

CherryPy se pogosto odloži za obstoječo knjižnico drugih proizvajalcev, da podpira funkcijo, namesto da bi jo zagotovil. Aplikacij WebSocket na primer CherryPy ne podpira neposredno, ampak prek knjižnice ws4py.

Dokumentacija za CherryPy vključuje priročno vadnico skozi različne vidike programa. Za razliko od nekaterih drugih okvirnih vadnic vas ne bo vodil skozi celotno celovito aplikacijo, vendar je vseeno koristna. Dokumenti so priloženi s priročnimi opombami o uvajanju v navidezne gostitelje, povratnem strežniku proxy prek Apache in Nginx ter številnih drugih scenarijih.

Sokol

Če gradite API-je na osnovi REST in nič drugega, je bil Falcon narejen samo za vas. Vitko in hitro, skoraj brez odvisnosti od običajne knjižnice, Falcon ponuja vse, kar potrebujete za REST API-je, in nič več. Falcon 2.0, izdan leta 2019, odpravlja podporo Python 2.x in zahteva vsaj Python 3.5.

Velik del tega, zakaj Falcon zasluži oznako "lahko in vitko", nima veliko opraviti s številom vrstic kode v okviru. To je zato, ker Falcon aplikacijam ne nalaga skoraj nobene lastne strukture. Aplikacija Falcon mora le navesti, katere funkcije preslikajo na katere končne točke API. Vrnitev JSON-a s končne točke vključuje le malo več kot nastavitev poti in vrnitev podatkov prek json.dumps funkcija iz Pythonove standardne knjižnice. Podpora za async v Falconu še ni pristala, vendar potekajo prizadevanja, da bi se to zgodilo v Falconu 3.0.

Falcon uporablja tudi privzete privzete privzete nastavitve, zato je za nastavitev potrebno malo razgibavanja. Na primer, 404s so privzeto dvignjeni za vsako pot, ki ni izrecno deklarirana. Če želite stranki vrniti napake, lahko dvignete eno od številnih izjem iz zaloge, ki so priložene ogrodju (kot je npr. HTTPBadRequest) ali uporabite generično falcon.HTTPError izjema. Če potrebujete predhodno obdelavo ali naknadno obdelavo poti, Falcon nudi kljuke tudi za te.

Falconova osredotočenost na API-je pomeni, da tukaj ni veliko za izdelavo spletnih aplikacij z običajnimi uporabniškimi vmesniki HTML. Ne pričakujte veliko na primer funkcij za obdelavo obrazcev in orodij za zaščito CSRF. Kljub temu Falcon ponuja elegantne možnosti za razširitev svoje funkcionalnosti, tako da je mogoče zgraditi bolj dovršene predmete. Poleg zgoraj omenjenega mehanizma za povezavo boste našli vmesnik za ustvarjanje vmesne programske opreme, s katero lahko zavijete vse API-je Falcona.

Dokumentacija za Falcon je v primerjavi z drugimi okviri vitka, a le zato, ker je treba manj zajeti. Uporabniški priročnik vključuje formalno podrobno predstavitev vseh glavnih funkcij, skupaj z odsekom za hiter začetek, ki vam omogoča ogled vzorčne kode z opombo ali brez nje.

FastAPI

Ime FastAPI je dober povzetek tega, kar počne. Zasnovan je za hitro ustvarjanje končnih točk API-ja in tudi teče hitro.

FastAPI projekt Starlette uporablja za hitro omrežno jedro, vendar za uporabo FastAPI ni treba vedeti o notranjih delih Starlette. Končne točke definirate na približno enak način kot aplikacija za bučke ali steklenice - z okrasnimi elementi določite, katere funkcije obravnavajo katere poti - in nato vrnete slovarje, ki se samodejno prevedejo v JSON.

Preprosto lahko preglasite, kako se stvari vrnejo. Če želite na primer vrniti HTML / XML z nekaterih končnih točk, lahko to storite tako, da preprosto vrnete po meri Odziv predmet. Če želite dodati vmesno programsko opremo po meri, lahko vstavite vse, kar ustreza standardu ASGI.

FastAPI uporablja namig Pythonovega tipa, da zagotovi omejitve glede vrst podatkov, ki jih sprejemajo poti. Na primer, če imate pot s tipom Neobvezno [int], FastAPI bo zavrnil vse prispevke, razen celih števil. Končnim točkam ni treba dodati kode za preverjanje podatkov; lahko uporabite samo namige za tip in pustite FastAPI, da opravi delo.

Nekatere stvari so seveda izpuščene. Na primer, ni izvornega mehanizma za predloge HTML, ne manjka pa rešitev tretjih oseb, ki bi zapolnile to vrzel. Enako je s povezljivostjo zbirke podatkov, vendar dokumentacija vsebuje podrobnosti o tem, kako nagovoriti nekatere ORM-je (npr. Peewee), da delujejo z asinhranim vedenjem FastAPI.

Bučka

Številne razprave o spletnih ogrodjih Python se začnejo z Flaskom in to z dobrim razlogom. Bučka je dobro uveljavljen, dobro razumljen okvir, ki je enostaven za uporabo in precej stabilen. Z uporabo Flaska za lahek spletni projekt ali osnovni API REST je nemogoče zgrešiti, če pa boste poskušali zgraditi kaj večjega, se boste soočili s težkimi težavami.

Osrednja privlačnost Flaska je nizka ovira za vstop. Osnovno aplikacijo "hello world" lahko nastavite v manj kot 10 vrsticah Pythona. Flask vključuje široko uporabljen sistem za predloge HTML, Jinja2, da olajša upodabljanje besedila, vendar lahko Jinja2 zamenjate s poljubnim številom drugih mehanizmov za predloge (na primer Mustache) ali pa ustvarite svojega.

V imenu preprostosti Flask izpusti lepote, kot sta podatkovna plast ali ORM, in ne ponuja nobenih določb za preverjanje oblike. Vendar je Flask mogoče razširiti z razširitvami, ki jih je na desetine, ki zajemajo številne pogoste primere uporabe, kot so predpomnjenje, obdelava in preverjanje obrazcev ter povezljivost baze podatkov. Ta vitka privzeto zasnova vam omogoča, da začnete s projektiranjem aplikacije Flask z absolutno minimalno funkcionalnostjo, nato pa nanesete le tiste kose, ki jih potrebujete.

Dokumentacija Flaska je genialna in enostavna za branje. Dokument s hitrim zagonom odlično opravi začetek, hkrati pa razloži pomen privzetih možnosti za preprosto aplikacijo Flask, dokumenti API pa vsebujejo dobre primere. Odlična je tudi zbirka izrezkov Flash, ki so hitri primeri, kako izvesti določene naloge, na primer kako vrniti predmet, če obstaja, ali napako 404, če tega ne stori.

Flask je leta 2018 dosegel svoj mejnik 1.0, saj sta bili Python 2.6 in Python 3.3 najmanj podprti različici, veliko vedenja pa je bilo dokončno zastavljenih. Flask izrecno ne podpira Pythonove asinhrane sintakse, vendar je bila za zadovoljitev tega povpraševanja različica Flaska, imenovana Quart, združljiva z API-jem.

Piramida

Majhna in lahka, Pyramid je zelo primerna za naloge, kot je izpostavljanje obstoječe kode Pythona kot API REST ali zagotavljanje jedra spletnega projekta, kjer razvijalec opravi večino težkih težav.

"Piramida vam bo omogočila, da hitro postanete produktivni in bo rasla skupaj z vami," piše v dokumentaciji. "Ne bo vas zadrževalo, ko bo vaša aplikacija majhna, in vam ne bo ovirala, ko bo vaša aplikacija velika."

Dober način za opis piramidinega minimalizma bi bil "brez politike", izraz, uporabljen v delu dokumentacije, ki govori o tem, kako se Piramida oblikuje v primerjavi z drugimi spletnimi okviri. V bistvu izraz »brez politike« pomeni, da katero bazo podatkov ali kateri predloga za jezik izberete, ne skrbi za Pyramid.

Za izdelavo osnovne aplikacije Pyramid je potrebno zelo malo dela. Tako kot pri Bottle and Flask, lahko tudi aplikacija Pyramid poleg datotek za sam okvir vsebuje eno samo datoteko Python. Preprost API z eno potjo zahteva največ ducat vrstic kode. Večina tega je podobna od ... uvoza izjave in nastavitev strežnika WSGI.

Privzeto Pyramid vključuje več elementov, ki so pogosti v spletnih aplikacijah, vendar so na voljo kot sestavni deli, ki jih je treba združiti, in ne kot popolne rešitve. Podpora za uporabniške seje, na primer, ima celo zaščito CSRF. Toda podpora za uporabniške račune, na primer prijave ali upravljanje računov, ni del dogovora. Morali ga boste zviti sami ali dodati prek vtičnika. Enako velja za obdelavo obrazcev in povezave z bazo podatkov.

Pyramid celo ponuja način za ustvarjanje predlog iz prejšnjih projektov Pyramid za ponovno uporabo predhodnega dela. Te predloge, imenovane »odri«, ustvarijo aplikacijo Pyramid s preprostim usmerjanjem in nekaterimi začetnimi predlogami HTML / CSS. Priloženi odri vključujejo vzorčni začetni projekt in projekt, ki se prek priljubljene Pythonove knjižnice SQLAlchemy poveže z bazami podatkov.

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