Programmēšana

Pārskats: salīdzināti 13 Python tīmekļa ietvari

Ja jūs izstrādājat tīmekļa lietojumprogrammu un esat izvēlējies Python kā valodu, lai to izveidotu, tas ir gudrs solis. Python attīstības briedums, stabilas bibliotēkas un reālās adaptācijas plašums ir palīdzējuši padarīt to par neobjektīvu tīmekļa izstrādei.

Tagad nāk grūtā daļa: izvēloties vienu no daudzajiem pieejamajiem Python tīmekļa ietvariem. Tas ne tikai palielina to skaitu, bet var būt grūti atrast to, kas vislabāk atbilst jūsu lietošanas gadījumam. Ja jūs veidojat ātru un netīru REST API, jums nevajadzēs ne tuvu santehnikas un elektroinstalācijas, kas nepieciešama pilnīgai lietotājam paredzētajai lietojumprogrammai ar lietotāja pieteikšanās, veidlapu validācijas un augšupielādes apstrādes iespējām.

Saistītais video: vienkāršas tīmekļa lietotnes izveide ar Python un Flask

Šajā apkopojumā mēs pārbaudīsim 13 visplašāk izvietotos Python tīmekļa ietvarus. Mēs atzīmēsim, kāda veida tīmekļa lietojumprogrammas ir vispiemērotākās būvēšanai, un izpētīsim, kā tās sakrīt viens pret otru šajās sešās jomās:

Uzstādīšana: Cik viegli vai vienkārši ir izveidot ietvaru - projektiem, kuriem nav nepieciešama formāla instalēšana (to var vienkārši ievietot esošajā projektā kā iekļauts modulis), lai sāktu darbu, nepieciešams minimāls katls vai nāk ar kādu iepriekš konfigurētu veidu uzstādīšana iegūst papildu punktus.

Dokumentācija: Gandrīz katram pienācīgam Python projektam ir dokumentācija, kas iet cauri iestatīšanai, ilustrē pamata lietošanas gadījumus un sniedz informāciju par API. Šeit mēs piešķiram augstākas atzīmes ietvariem, kas parāda, kā izveidot visu lietotni kā daļu no apmācības, iekļauj kopīgas receptes vai dizaina modeļus un citādi pārsniedz un pārsniedz pienākuma pieprasījumu (piemēram, sniedzot informāciju par to, kā palaist (piemēram, PyPy vai IronPython).

Vadība: Tas ir relatīvs rādītājs, kas norāda, cik daudz darba nepieciešams ietvara konfigurēšanai un uzturēšanai. Minimālais ietvars šeit pēc noklusējuma ir augstāks.

Vietējās iespējas: Cik daudz bateriju ir iekļautas? Augstāki rādītāji tiek piešķirti ietvariem, kas nodrošina vietējo atbalstu internacionalizācijai, HTML veidnēm un datu piekļuves slānim. Punkti attiecas arī uz ietvariem, kas vietējā līmenī izmanto Python nesen ieviesto vietējo atbalstu asinhronajām I / O operācijām.

Drošība: Rāmji, kas nodrošina vietējos drošības pasākumus, piemēram, vietņu pieprasījumu viltošanas (CSRF) aizsardzību un sesiju pārvaldību ar šifrētiem sīkfailiem, iegūst augstākas atzīmes.

Mērogojamība: Lielākā daļa Python ietvaru var izmantot tādus projektus kā Gevent vai Gunicorn, lai darbotos mērogā. Šeit mēs aplūkojam ietvaram raksturīgas funkcijas, kas veicina mērogojamību, piemēram, izvades un lapu fragmentu kešatmiņa.

Ja jūs interesē veiktspējas etaloni, apskatiet TechEmpower notiekošo izmēģinājumu sēriju, kurā tiek salīdzināti vairāki tīmekļa ietvari dažādos uzdevumos, ar kodu un metodiku, kas ievietota vietnē GitHub un tiek pastāvīgi pārvērtēta. Ne visi šīs diskusijas ietvari tiek analizēti tur, taču ir iespējams labi izprast, kuri ietvari vislabāk darbojas zem kāda veida slodzēm.

Mēs kopumā aplūkosim 13 ietvarstruktūras. Pieci no tiem - CubicWeb, Django, Web2py, Weppy un Zope2 - izmanto “virtuves izlietnes” pieeju, iekļaujot lielākoties visas funkcijas, kuras jūs varētu iedomāties nepieciešamas tīmekļa lietojumprogrammai. Atlikušie astoņi ietvari - pudele, CherryPy, Falcon, kolba, piramīda, Tornado, Web.py un Wheezy.web - piedāvā vienkāršāku un vienkāršāku minimālismu, tirdzniecības apjomu un pilnīgumu.

Sāksim ar smagsvariem.

Smags Python tīmekļa ietvars

CubicWeb

CubicWeb tiek apmaksāts kā “semantiska tīmekļa lietojumprogrammu sistēma, kas atbalsta atkārtotu izmantošanu un objektorientētu dizainu”. Tā ir intriģējoša sistēma - kā to atzīmēja Riks Grehans, kad viņš to apskatīja 2011. gadā -, kas uzsver abstrakciju un atkārtoti izmantojamu koda bloku, ko sauc par “kubiem”, izmantošanu, taču dažiem izstrādātājiem tā var būt pārāk abstrakta vai savdabīga.

Kubi ir programmatūras komponenti, kuriem ir shēma (datu modelis), entītijas (programmēšanas loģika) un skati. Apkopojot vairākus klucīšus, katrs veicot savu uzdevumu, varat sastādīt programmatūras lietojumprogrammas, atkārtoti izmantojot savu un citu kodu.

CubicWeb savā būtībā nodrošina pamata sastatnes, kuras izmanto visas tīmekļa lietotnes: datu krātuve datu savienojumiem un glabāšanai; “tīmekļa programma” HTTP pieprasījuma / atbildes un CRUD pamata darbībām; un shēma datu modelēšanai. Tas viss ir aprakstīts Python klases definīcijās. Lai iestatītu un pārvaldītu CubicWeb gadījumus, jūs strādājat ar komandrindas rīku, kas līdzīgs Django izmantotajam.

Šķiet, ka CubicWeb neizmanto Python 3 vietējo asinhronizācijas funkcionalitāti. Apļveida veids, kā iekļaut asinhronu, būtu izmantot moduli cubicweb.pyramid, lai izmantotu Pyramid Framework kā tīmekļa serveri, un izdarīt uz Pyramid dakšas, kurā tiek izmantotas asinhronās konstrukcijas. Bet pagaidām viss tiešāks šķiet nepieejams.

Lai ielādētu vai manipulētu ar pastāvīgiem datiem CubicWeb lietotnē, izmantojiet Relation Query Language (RQL), kas neskaidri izmanto SQL līdzīgu sintaksi, bet ir veidota pēc W3C's SparQL. CubicWeb pamatojums tam atkal ir abstrakcija: RQL nodrošina ļoti atsaistītu ceļu dažādu datu avotu savstarpējai sasaistei. Bet, to ieviešot, manuāli veidojot vaicājumus kā virknes, tas, iespējams, jutīsies novecojis izstrādātājiem, kuri pieraduši pie ORM.

CubicWeb izmantošanai ir arī citi šķēršļi. Vienam iestatīšana var sagādāt grūtības. Tā kā CubicWeb ir daudz atkarību, vislabāk to izmantot pip instalēt tos visus atnest. Iespējams, jums būs jāveic arī noteikts manuāls kniebiens vietējā vidē. Tas ir krasā pretstatā citiem ietvariem pip instalēt vai ietvert ietvara kodu cita projekta apakšmapē ir viss, kas nepieciešams.

Vēl viena iespējama problēma ir vietējā veidnes motora neesamība; HTML ģenerēšana tiek atstāta izstrādātāja ziņā. To varētu pārvarēt, izmantojot trešās puses veidņu sistēmu, piemēram, Jinja2, vai izvēloties kubu, kas nodrošina rīkus tīmekļa lietotāja interfeisiem, piemēram, HTML ietvara Boostrap.

Ir atrisināta viena ilgstoša problēma ar CubicWeb - Python 3 atbalsta trūkums. Sākot ar 2016. gada jūniju un versiju 3.23, Python 3 atbalsts nonāca CubicWeb, izņemot tādus moduļus kā Twisted, kas paši nav pilnībā pārnesti.

Tāpat kā Web2py, arī CubicWeb savu garo dokumentāciju sauc par “grāmatu”. Nepieciešams laiks, lai izskaidrotu CubicWeb neparasto pieeju, parādītu, kā izveidot dažas pamata lietojumprogrammas, iekļauj API atsauces un parasti nepietiek ar savu specifiku.

Django

Dekādē un pārmaiņās kopš Django pirmās parādīšanās tā ir kļuvusi par vienu no Python visplašāk izmantotajiem ietvariem tīmekļa lietojumprogrammu izveidošanai. Django ir aprīkots ar lielāko daļu visu nepieciešamo akumulatoru, tāpēc tas vairāk orientējas uz lielu, nevis mazu, lietojumprogrammu veidošanu.

Saistītais video: vienkāršas vietnes izveide ar Django

Pēc daudzu gadu sēdēšanas versijā 1.x Django nesen izveidoja versiju, kas atrodas pa kreisi no komata. Lielākās izmaiņas Django 2.0 ir tas, ka ietvars tagad darbojas tikai ar Python 3.4 un jaunākām versijām. Ideālā gadījumā jums vajadzētu izmantot Python 3.x jebkurā gadījumā, tāpēc vienīgais iemesls, lai izmantotu Django 1.x filiāli, ir tas, ja esat iestrēdzis vecā Python versijā.

Galvenā Django apelācijas sastāvdaļa ir izvietošanas ātrums. Tā kā tajā ir tik daudz gabalu, kas nepieciešami, lai izstrādātu vidējo tīmekļa lietojumprogrammu, jūs varat ātri pārvietoties. Maršrutēšana, URL parsēšana, datu bāzes savienojamība (ieskaitot ORM), veidlapu validācija, uzbrukumu aizsardzība un veidnes ir iebūvētas.

Jūs atradīsit veidus visbiežāk sastopamajiem tīmekļa lietojumprogrammu scenārijiem. Piemēram, lietotāju pārvaldība ir atrodama lielākajā daļā vietņu, tāpēc Django to piedāvā kā standarta elementu. Tā vietā, lai izveidotu savu sistēmu lietotāju kontu, sesiju, paroļu, pieteikšanās / atteikšanās, administratora atļauju un tā tālāk izsekošanai, Django ir šīs funkcijas dabiski. Tos var izmantot tādus, kādi tie ir, vai paplašināt, lai aptvertu jaunus lietošanas gadījumus ar minimālu darba apjomu.

1. Kodols ir BSD; daži komponenti LGPLv3. 2. Pieejams, izmantojot zope.formlib; instalēta atsevišķi, bet tiek atbalstīta kā daļa no projekta. 3. Pieejams, izmantojot trešās puses paplašinājumu.
 CubicWebDjangoWeb2pyWeppyZope2
LicenceLGPLBSDLGPLv3BSD / LGPLv3 [1]Zope publiskā licence
Vietējā HTML veidņu sistēma
Vietējā ORM / datu pārvaldība
Paplašinājumu bibliotēka
Veidlapas validācijaJā [2]
Aizsardzība pret viltojumiem vairākās vietnēs
Lietotāju pārvaldība / piekļuve uz lomām
Python 3 atbalsts
Datu modeļu shēmas migrēšana
Atbildes kešatmiņa
Internacionalizācijas atbalsts
Vietējo WebSockets atbalstsNē [3]
Interaktīva izstrādes vide

Django ir saprātīgi un droši noklusējumi, kas palīdz aizsargāt jūsu tīmekļa lietojumprogrammu no uzbrukumiem. Ievietojot mainīgo lapas veidnē, piemēram, virkni ar HTML vai JavaScript, saturs netiek renderēts burtiski, ja vien nepārprotami nenorādāt mainīgā gadījumu kā drošu. Tas pats par sevi samazina daudzus izplatītākus vietņu skriptu veidošanas jautājumus. Ja vēlaties veikt veidlapu pārbaudi, varat izmantot visu, sākot no vienkāršas CSRF aizsardzības līdz pilnīgai lauka validācijas mehānismam, kas sniedz detalizētu atgriezenisko saiti ar kļūdām.

Funkcija, kas ir tik bagāta un plaša kā Django, nebūtu daudz laba, ja tai nebūtu pievienota stingra dokumentācija. Django dokumentācijas vietnē tiek apskatīti visi ietvara aspekti no vairākiem leņķiem. Darbs ar Python 3 vai citiem valodas aromātiem, pareiza drošība, kopīgu tīmekļa lietojumprogrammu komponentu ieviešana (piemēram, sesijas vai lapošana), vietņu karšu ģenerēšana - tie visi ir iekļauti. Katra lietojumprogrammas slāņa - modeļa, skata un veidnes - API ir arī detalizēti aprakstīti.

Ar lielu spēku tomēr nāk ļoti sarežģīti. Django lietojumprogrammām ir ļoti smaga reputācija ar daudzām kustīgām detaļām. Pat vienkāršai Django lietotnei, kurā ir tikai pāris maršruti, ir nepieciešama diezgan daudz konfigurācijas, lai tā darbotos. Ja jūsu uzdevums ir nedarīt neko citu kā iestatīt pāris vienkāršus REST galapunktus, Django gandrīz noteikti ir pārspīlēts.

Django ir arī savādas dīvainības. Piemēram, lapu veidnēs nevar izmantot izsaucamos. Piemērs: Jūs varat nokārtot {{user.name}} kā komponentu veidnē, bet ne {{user.get_name ()}}. Tas ir viens no veidiem, kā Django nodrošina, ka veidnes netīšām nedara nejaukas lietas, taču šie ierobežojumi var sagraut, ja neesat tiem gatavs. Lai gan ir risinājumi, viņi parasti maksā par veiktspēju.

Django kodols ir sinhrons. Tomēr viens no veidiem, kā pievienot asinhrono uzvedību, ir Django kanālu projekts. Šis projekts, oficiālais Django papildinājums, pievieno Django asinhrono apstrādi savienojumiem un kontaktligzdām, vienlaikus saglabājot Django programmēšanas idiomas.

Web2py

Rubīna pasaulē Ruby on Rails ir faktiskais tīmekļa ietvars. DePaulas universitātes datorzinātņu profesoru Masimo Di Pjero Rails iedvesmoja izveidot Python tīmekļa sistēmu, kuru bija tikpat viegli uzstādīt un strādāt. Rezultāts ir Web2py.

Web2py lielākā pievilcība ir iebūvētā izstrādes vide. Iestatot Web2py gadījumu, jums tiek nodrošināta tīmekļa saskarne, galvenokārt tiešsaistes Python lietojumprogrammu redaktors, kurā varat konfigurēt lietotnes komponentus. Tas parasti nozīmē modeļu, skatu un kontrolleru izveidi, katrs aprakstīts, izmantojot Python moduļus vai HTML veidnes. Dažos lietotņu piemēros ir Web2py no kastes. Varat tos nošķirt, lai uzzinātu, kā viņi darbojas, vai izmantot tos kā startera veidnes, lai izveidotu savas lietotnes.

Izstrādātāji Web2py parasti izvieto, vienkārši lejupielādējot tā pirmkodu un to izmantojot. Bet mazāk tehniskiem lietotājiem Windows vai MacOS Web2py veidotāji piedāvā versijas, kas būtībā ir atsevišķi serveri. Lejupielādējiet, izpakojiet un palaidiet vienu no šīm versijām, un jums būs vietējais tīmekļa serveris ar iebūvētu Web2py iepriekš konfigurētu kopiju. Tas ir jauks veids, kā palīdzēt izveidot Web2py lietotni, kuru pēc tam var izvietot citur pēc vajadzības.

Web2py tīmekļa saskarne tika veidota, izmantojot Bootstrap 2.16.1, tāpēc to ir viegli redzēt un ērti orientēties. Pārlūkprogrammas redaktors neaizstāj pilnvērtīgu IDE, taču tas ir aprīkots ar noderīgiem palīglīdzekļiem, piemēram, līniju numerāciju un Python sintakses izcelšanu (ieskaitot automātisko atkāpi). Iekļauta arī ātra tīmekļa saskarne Python čaulai, lai vajadzības gadījumā jūs varētu mijiedarboties ar Web2py no komandrindas - jauka piekāpšanās ekspertiem.

Web2py izmantotā datu ieguves sistēma darbojas nedaudz savādāk nekā Django ORM un citi no tā iedvesmoti ORM (piemēram, Peewee). Šīs sistēmas modeļu definēšanai izmanto Python klases, kur Web2py izmantojat tādas konstruktora funkcijas kā definēt_tabulu lai modelētu modeļus. Lielākā daļa šo atšķirību, visticamāk, sagrauj tikai tos cilvēkus, kuriem jau ir pieredze ar vienu un kuri sāk izmantot otru; tie ir aptuveni vienlīdz sarežģīti jaunpienācējiem. Jums, visticamāk, nebūs problēmu ar Web2py piesaisti datu sniedzējam, jo ​​tas runā ar gandrīz visām lielākajām esošajām datu bāzēm.

Patiesi noderīga ar datu bāzi saistīta funkcija ir spēja ģenerēt modeļu diagrammu, jo labāk vizualizēt, kā jūsu modeļi ir saistīti viens ar otru. Lai iespējotu šo funkciju, jums būs jāinstalē bibliotēka pygraphviz.

Web2py piegādā daudzus citus profesionālas kvalitātes komponentus: internacionalizācijas funkcijas, vairākas kešatmiņas metodikas, piekļuves kontroli un autorizāciju un pat priekšējās daļas efektus (piemēram, datumu atlasītāju veidlapās), izmantojot integrētu atbalstu jQuery un AJAX. Iekļauti arī ārējās un iekšējās starpprogrammatūras āķi, lai gan Web2py pamatfunkciju nomaiņai nav atļauts izmantot starpprogrammatūru.

Viens būtisks Web2py ierobežojums ir tas, ka tas ir saderīgs tikai ar Python 2.x. Pirmkārt, tas nozīmē, ka Web2py nevar izmantot Python 3 asinhrono sintaksi. Diviem, ja jūs paļaujaties uz ārējām bibliotēkām, kas ir ekskluzīvas tikai Python 3, jums nav paveicies. Tomēr tiek strādāts pie tā, lai Web2py Python 3 būtu saderīgs, un šī raksta sagatavošana ir gandrīz pabeigta.

Nav brīnums, ka Web2py dokumentācija tiek dēvēta par “grāmatu”. Pirmkārt, tas aptver satriecošu daudzumu materiālu Web2py, Python un abās izmantotajās izvietošanas vidēs. Otrkārt, tas ir uzrakstīts ļoti pieejamā stāstījuma stilā. Treškārt, tā padziļināti runā par kopīgiem lietojumprogrammu veidošanas scenārijiem. Piemēram, ir visa nodaļa par jQuery (komplektā ar Web2Py) izmantošanu AJAX lietojumprogrammu veidošanai.

Weppy

Vepijs jūtas kā pusceļš starp minimālo Kolbas vienkāršību un Django pilnīgumu. Kamēr Weppy lietotnei ir Flash vienkāršība, Weppy ir aprīkots ar daudzām Django atrodamām funkcijām, piemēram, datu slāņiem un autentifikāciju. Tādējādi Weppy ir piemērots lietotnēm, kas svārstās no ārkārtīgi vienkāršām līdz nedaudz izsmalcinātām.

No pirmā acu uzmetiena Weppy kods izskatās ļoti daudz, piemēram, kolbas vai pudeles kods. Lai izveidotu un darbotos pamata, viena maršruta vietne, ir nepieciešamas dažas instrukcijas. Maršrutus var aprakstīt, izmantojot funkciju dekorētājus (vienkāršākais veids) vai programmatiski, un tā sintakse ir cieši saistīta ar kolbu / pudeli. Veidņu veidošana darbojas aptuveni tāpat, izņemot nelielas sintakses variācijas.

Weppy kontrastē ar šiem citiem ietvariem, iekļaujot dažas funkcijas, kuras tie iekļauj tikai kā spraudņus vai papildinājumus. Piemēram, ne kolbā, ne pudelē nav iebūvētas ORM vai datu pārvaldības sistēmas. Weppy ietver ORM, kaut arī pamatojoties uz pyDAL projektu, nevis daudz populārāko SQLAlchemy. Weppy pat atbalsta shēmas migrāciju, kuru Django atbalsta kā daļu no ORM (arī Django migrācijas sistēma ir daudz automatizētāka). Lai gan Weppy ir paplašināšanas mehānisms, oficiāli apstiprināto papildinājumu saraksts ir niecīgs, daudz mazāks nekā Kolbas paplašinājumu katalogs.

Vieglākas konstrukcijas, piemēram, Weppy, bieži izmanto, lai izveidotu RESTful API, un Weppy šim nolūkam ir aprīkotas ar ērtības funkcijām. Novietojiet maršrutā @service dekoratoru, un jūsu atgrieztie dati tiks automātiski formatēti jūsu izvēlētajā JSON vai XML.

Weppy ietver citas funkcijas, kas, šķiet, vairāk atbilst lielākam ietvaram, taču tās tiek ieviestas bez lielapjoma. Piemēri: datu validācijas mehānismi, veidlapu apstrāde, atbildes kešatmiņa un lietotāju validācija. Visos šajos gadījumos Vepijs izvēlas pieeju “pietiekami daudz”. Nodrošinātās funkcijas nav tik pilnīgas, kā jūs varētu atrast Django lieluma sistēmā, taču izstrādātājam nav jāiegulda daudz darba, lai tās būtu noderīgas, un tās vienmēr var pagarināt pēc fakta.

Vēl viena Weppy atrasta iezīme, kas parasti saistīta ar smagāku svaru, ir internacionalizācijas atbalsts. Veidnēs esošās virknes var tulkot atbilstoši lietojumprogrammai pievienotajiem lokalizācijas failiem, kas ir vienkāršas Python vārdnīcas. Valodas izvēli var iestatīt arī parsējot pārlūka pieprasījumu (tas ir, HTTP galveni Accept-Language) vai saistot tulkojumu ar noteiktu maršrutu.

Weppy dokumentācijai ir tāds pats aromāts kā pašam ietvaram. Tas ir tīrs, lasāms un rakstīts, lai to lietotu cilvēki. Papildus parastajam lietotnes piemēram “hello world”, tajā ir iekļauta jauka apmācība, kas ļauj izveidot mikroblogošanas sistēmu kā startera projektu.

Weppy ilgtermiņa plānos ietilpst asinhronizācijas un ligzdu kā zema līmeņa pirmās klases vienību atbalstīšana. Weppy izstrādātāji plāno ieviest šīs funkcijas versijā 2.0 un pēc tam pieprasīt Python 3.7 vai labāku visām nākamajām Weppy versijām.

Rezultātu karteVietējā spēja (20%) Vadība (20%) Uzstādīšana (20%) Dokumentācija (20%) Drošība (10%) Mērogojamība (10%) Kopējais rādītājs (100%)
Pudele 0,1281010877 8.6
CherryPy 17.0.0799988 8.4
CubicWeb 3.26.410871097 8.6
Django 2.11088101010 9.2
Piekūns 1.4.17108877 8.0
Kolba 1.0.2898988 8.4
Piramīda 1.9.28881097 8.4
Tornado 4.3899887 8.3
Web.py 0,398810898 8.5
Web2py 2.16.110971098 8.9
Spēcīgs 1.2.1110899109 9.1
Sēkšana.web 0.1.485998888 8.4
Zope2 2.13.241087999 8.6
$config[zx-auto] not found$config[zx-overlay] not found