Programiranje

Pregled: Primerjanih 13 spletnih okvirov Python

Če razvijate spletno aplikacijo in ste izbrali Python kot jezik, v katerega ga želite vgraditi, je to pametna poteza. Zrelost Pythona v razvoju, robustne knjižnice in širina resničnega sprejemanja so mu pomagale, da ni mogoč pri spletnem razvoju.

Zdaj je najtežji del: Izbrati enega od številnih spletnih okvirov Python, ki so na voljo. Ne samo, da število nenehno narašča, ampak težko je najti tisto, ki najbolj ustreza vaši uporabi. Če gradite hiter in umazan API REST, vam ne bo treba nikjer v bližini vodovodne napeljave in napeljave, potrebne za popolno uporabniško usmerjeno aplikacijo z uporabniškimi prijavami, preverjanjem obrazcev in obdelavo nalaganja.

Povezani video: Ustvarjanje preproste spletne aplikacije s Pythonom in Flaskom

V tem poročilu bomo preučili 13 najbolj razširjenih spletnih okvirov Python. Opazili bomo, katere vrste spletnih aplikacij so najprimernejše za izdelavo, in preučili, kako se med seboj naslanjajo na teh šestih področjih:

Namestitev: Kako enostavno ali enostavno je postaviti okvir - projekti, ki ne zahtevajo formalne namestitve (preprosto ga je mogoče vključiti v obstoječi projekt kot vključeni modul), za začetek potrebujejo minimalno vzorčno ploščo ali prihajajo s kakšno vnaprej konfigurirano setup dobili dodatne točke.

Dokumentacija: Skoraj vsak spodoben projekt Python ima dokumentacijo, ki opisuje nastavitve, prikazuje osnovne primere uporabe in podrobnosti o API-jih. Tu damo višje ocene ogrodjem, ki kažejo, kako ustvariti celotno aplikacijo kot del vadnice, vključujejo običajne recepte ali vzorce oblikovanja in sicer presegajo dolžnost (na primer z zagotavljanjem podrobnosti o tem, kako zagnati pod različico Python, kot sta PyPy ali IronPython).

Vodstvo: To je relativna ocena, ki kaže, koliko dela je potrebno za konfiguracijo in vzdrževanje ogrodja. Minimalni okviri so tukaj privzeto boljši.

Native sposobnosti: Koliko baterij je vključenih? Višje ocene dobijo okviri, ki zagotavljajo izvorno podporo za internacionalizacijo, predloge HTML in plast dostopa do podatkov. Točke se nanašajo tudi na ogrodja, ki nativno uporabljajo Pythonovo nedavno uvedeno izvorno podporo za asinhrone V / I operacije.

Varnost: Okviri, ki zagotavljajo izvorne varnostne ukrepe, kot so zaščita pred ponarejanjem medsebojnih mest (CSRF) in upravljanje sej s šifriranimi piškotki, dobijo višje ocene.

Razširljivost: Večina Pythonovih okvirov lahko za izvajanje projektov, kot sta Gevent ali Gunicorn, deluje v velikem obsegu. Tu si ogledujemo funkcije, ki izvirajo iz ogrodja, ki spodbujajo razširljivost, na primer izhod in predpomnjenje fragmentov strani.

Če vas zanimajo merila uspešnosti, si oglejte neprekinjeno serijo preizkusov TechEmpower, ki primerjajo več spletnih okvirov med različnimi nalogami, s kodo in metodologijami, objavljenimi na GitHubu in podvrženim stalni ponovni oceni. Tam niso analizirani vsi okviri v tej razpravi, vendar je mogoče dobro razumeti, kateri okviri se najbolje obnesejo pri kakšnih obremenitvah.

Ogledali si bomo 13 okvirov. Pet od teh - CubicWeb, Django, Web2py, Weppy in Zope2 - se poslužujejo pristopa "pomivalnega korita", ki vsebuje večino vseh funkcij, za katere si predstavljate, da jih potrebujete za spletno aplikacijo. Preostalih osem okvirov - Bottle, CherryPy, Falcon, Flask, Pyramid, Tornado, Web.py in Wheezy.web - ponujajo bolj minimalističen prevzem, množično trgovanje in popolnost za preprostost in enostavnost.

Začnimo s težkimi utežmi.

Težki spletni ogrodji Python

CubicWeb

CubicWeb se zaračunava kot "semantični okvir spletnih aplikacij, ki daje prednost ponovni uporabi in objektno usmerjenemu oblikovanju." Gre za intriganten sistem - kot je ugotovil Rick Grehan, ko ga je iskal že leta 2011 -, ki poudarja uporabo abstrakcij in večkratnih gradnikov kode, imenovane "kocke", vendar je za nekatere razvijalce morda preveč abstrakten ali idiosinkratičen.

Kocke so programske komponente, ki vsebujejo shemo (podatkovni model), entitete (programska logika) in poglede. Če sestavite več kock, pri čemer vsaka opravlja svojo nalogo, lahko sestavite programske aplikacije tako, da ponovno uporabite svojo kodo in kodo drugih.

V bistvu CubicWeb ponuja osnovni gradbeni oder, ki ga uporablja vsaka spletna aplikacija: "repozitorij" za podatkovne povezave in shranjevanje; "spletni mehanizem" za osnovne HTTP zahteve / odzive in CRUD ukrepe; in shemo za modeliranje podatkov. Vse to je opisano v definicijah razreda Python. Če želite nastaviti in upravljati primerke CubicWeb, uporabljate orodje ukazne vrstice, podobno tistemu, ki se uporablja za Django.

Zdi se, da CubicWeb ne uporablja izvorne async funkcije Pythona 3. Krožni način za vključitev async bi bil uporaba modula cubicweb.pyramid za uporabo ogrodja Pyramid kot spletnega strežnika in risanje vilic Pyramid, ki uporablja asinhrične konstrukcije. Toda vse bolj preprosto je za zdaj nedosegljivo.

Če želite pridobiti ali manipulirati trajne podatke v aplikaciji CubicWeb, uporabite jezik poizvedb relacije (RQL), ki uporablja nejasno sintakso, podobno SQL-u, vendar je oblikovan po vzorcu W3C-jevega SparQL-a. Utemeljitev CubicWeba za to je spet abstrakcija: RQL ponuja močno ločeno pot za medsebojno povezavo različnih virov podatkov. Toda ko se izvaja, se bo z ročnim oblikovanjem poizvedb kot nizov verjetno zdelo zastarelo za razvijalce, navajene na ORM.

Obstajajo še druge ovire za uporabo CubicWeb. Za enega je namestitev lahko težava. Ker ima CubicWeb veliko odvisnosti, je najbolje uporabiti pip namestite da jih vse poberem. Morda boste morali opraviti tudi določeno količino ročnega prilagajanja lokalnega okolja. To je v popolnem nasprotju z drugimi okviri, kjer teče pip namestite ali spuščanje kode ogrodja v podmapo drugega projekta je vse, kar je potrebno.

Druga možna težava je odsotnost izvornega mehanizma za predloge; ustvarjanje HTML je prepuščeno razvijalcu. To bi lahko rešili z uporabo sistema za predloge tretjih oseb, kot je Jinja2, ali pa se odločite za kocko, ki ponuja orodja za spletne uporabniške vmesnike, na primer tisto za ogrodje Boostrap HTML.

Ena dolgoletna težava s CubicWebom - pomanjkanje podpore Python 3 - je bila rešena. Od junija 2016 in različice 3.23 je podpora za Python 3 pristala v CubicWeb, razen za module, kot je Twisted, ki sami niso v celoti preneseni.

Tako kot Web2py tudi CubicWeb svojo dolgotrajno dokumentacijo imenuje "knjiga". Potreben si je čas, da razložite nenavaden pristop CubicWeba, predstavite, kako zgraditi nekatere osnovne aplikacije, vključite sklice na API in si na splošno prizadevate, da bi bili specifični.

Django

V desetletju in spremembah, odkar se je Django prvič pojavil, je postal eden najbolj razširjenih Pythonovih okvirov za ustvarjanje spletnih aplikacij. Django je opremljen z večino vseh baterij, ki jih morda potrebujete, zato je bolj nagnjen k izdelavi velikih aplikacij kot majhnih.

Povezani video: Ustvarjanje preprostega spletnega mesta z Django

Po dolgih letih sedenja pri različici 1.x je Django pred kratkim naredil različico na levi strani decimalne vejice. Največja sprememba v Django 2.0 je ta, da ogrodje zdaj deluje samo s Pythonom 3.4 in novejšimi. V idealnem primeru bi morali vseeno uporabiti Python 3.x, zato je edini razlog za uporabo 1.x veje Djanga ta, da ste zaljubljeni v staro različico Pythona.

Ključni del pritožbe Djanga je hitrost uvajanja. Ker vključuje toliko kosov, ki jih potrebujete za razvoj povprečne spletne aplikacije, se lahko hitro premikate. Vgrajeno je usmerjanje, razčlenjevanje URL-jev, povezljivost baze podatkov (vključno z ORM), preverjanje obrazca, zaščita pred napadi in predloge.

Našli boste gradnike za najpogostejše scenarije spletnih aplikacij. Upravljanje uporabnikov je na primer na voljo na večini spletnih mest, zato ga Django ponuja kot standardni element. Namesto da bi morali ustvariti lasten sistem za sledenje uporabniškim računom, sejam, geslom, prijavam / odjavam, skrbniškim dovoljenjem itd., Ima Django te funkcije izvorno. Uporabljajo se lahko takšne, kot so, ali razširjene, da zajemajo nove primere uporabe z minimalno količino dela.

1. Jedro je BSD; nekatere komponente LGPLv3. 2. Na voljo prek zope.formlib; nameščen ločeno, vendar podprt kot del projekta. 3. Na voljo prek neodvisne razširitve.
 CubicWebDjangoWeb2pyWeppyZope2
LicencaLGPLBSDLGPLv3BSD / LGPLv3 [1]Javna licenca Zope
Izvorni sistem za predloge HTMLDaDaDaDaDa
Izvorno upravljanje ORM / podatkovDaDaDaDaDa
Knjižnica razširitevDaDaDaDaDa
Potrditev obrazcaDaDaDaDaDa [2]
Zaščita pred ponarejanjem zahtev na več mestihDaDaDaDaDa
Upravljanje uporabnikov / dostop po vlogahDaDaDaDaDa
Podpora za Python 3DaDaNeDaNe
Selitve shem za podatkovne modeleDaDaDaDaNe
Predpomnjenje odzivaNeDaDaDaDa
Podpora internacionalizacijiDaDaDaDaDa
Native WebSockets podporaNeNe [3]DaNeNe
Interaktivno razvojno okoljeDaNeDaNeDa

Django ima zdrave in varne privzete nastavitve, ki vašo spletno aplikacijo ščitijo pred napadi. Ko spremenljivko postavite v predlogo strani, na primer niz z HTML ali JavaScript, se vsebina ne upodablja dobesedno, razen če primera spremenljivke izrecno določite kot varnega. To samo po sebi zmanjšuje številna pogosta vprašanja medsebojnega skriptiranja. Če želite izvesti preverjanje veljavnosti obrazca, lahko uporabite vse od preproste zaščite CSRF do popolnih mehanizmov za preverjanje polj po polju, ki vrnejo podrobne povratne informacije o napakah.

Tako bogat in širok nabor funkcij, kot je Djangov, ne bi bil preveč dober brez zanesljive dokumentacije. Djangovo spletno mesto za dokumentacijo podrobno analizira vsak vidik ogrodja z več zornih kotov. Delo s Pythonom 3 ali drugimi različicami jezika, pravilno izvajanje varnosti, izvajanje skupnih komponent spletne aplikacije (kot so seje ali paginacija), ustvarjanje zemljevidov spletnih mest - vsi so zajeti. Podrobno so opisani tudi API-ji za vsako plast aplikacije - model, pogled in predlogo.

Z veliko močjo pa prihaja do velike zapletenosti. Aplikacije Django slovijo kot izjemno težke in imajo veliko gibljivih delov. Tudi preprosta aplikacija Django z le nekaj potmi zahteva precej konfiguracije, da se zažene. Če je vaša naloga le, da nastavite nekaj preprostih končnih točk REST, je Django skoraj zagotovo preveč.

Tudi Django ima svoje muhe. Predloge strani na primer ne morejo uporabljati klicateljev. Primer: Lahko opravite {{uporabniškoime}} kot komponento v predlogi, vendar ne {{user.get_name ()}}. To je eden od načinov, kako Django zagotavlja, da predloge nenamerno ne naredijo grdih stvari, toda te omejitve so lahko moteče, če nanje niste pripravljeni. Čeprav obstajajo rešitve, ponavadi vplivajo na uspešnost.

Djangovo jedro je sinhrono. Vendar je eden od načinov za dodajanje vedenja asinhronizacije projekt Django Channels. Ta projekt, uradni dodatek za Django, dodaja asinhrono obdelavo povezav in vtičnic Djangu, hkrati pa ohranja programske idiome Djanga.

Web2py

V svetu Ruby je Ruby on Rails dejanski spletni okvir. Profesorja računalniške znanosti Univerze DePaul Massima Di Pierra je Rails navdihnil, da je v Pythonu ustvaril spletni okvir, ki ga je bilo podobno enostavno postaviti in delati z njim. Rezultat je Web2py.

Največja atrakcija Web2pyja je vgrajeno razvojno okolje. Ko nastavite primerek Web2py, dobite spletni vmesnik, v bistvu spletni urejevalnik aplikacij Python, kjer lahko konfigurirate komponente aplikacije. To običajno pomeni ustvarjanje modelov, pogledov in krmilnikov, ki so opisani prek modulov Python ali predlog HTML. Nekaj ​​primerov aplikacij ponuja Web2py iz škatle. Te lahko razstavite, da vidite, kako delujejo, ali jih izkoristite kot začetne predloge za ustvarjanje lastnih aplikacij.

Razvijalci Web2py običajno uvedejo tako, da preprosto prenesejo njegovo izvorno kodo in jo uporabijo. Toda za manj tehnične uporabnike v sistemu Windows ali MacOS ustvarjalci Web2py ponujajo različice, ki so v bistvu samostojni strežniki. Prenesite, razpakirajte in zaženite eno od teh različic in dobili boste lokalni spletni strežnik z vnaprej konfigurirano kopijo Web2py. To je lep način, da začnete z ustvarjanjem aplikacije Web2py, ki jo lahko nato postavite drugje po potrebi.

Spletni vmesnik Web2py je bil zgrajen z Bootstrapom 2.16.1, zato je preprost za oči in enostaven za krmarjenje. Urejevalnik v brskalniku ne more nadomestiti polno razvitega IDE-ja, je pa opremljen s koristnimi pripomočki, kot sta oštevilčenje vrstic in poudarjanje sintakse Python (vključno s samodejnim zamikom). Vključen je tudi hiter spletni vmesnik do lupine Python, tako da lahko po potrebi v ukazni vrstici komunicirate z Web2py - kar je lepa koncesija za strokovnjake.

Sistem za odvzem podatkov, uporabljen v Web2py, deluje nekoliko drugače kot Djangov ORM in drugi ORM-ji, ki jih navdihuje (na primer Peewee). Ti sistemi uporabljajo razrede Python za definiranje modelov, kjer v Web2py uporabljate konstruktorske funkcije, kot so define_table primeriti modele. Večina teh razlik bo verjetno moteča samo za ljudi, ki že imajo izkušnje z enim in začnejo uporabljati drugega; za novince so približno enako zapleteni. Verjetno ne boste imeli težav s povezovanjem Web2py s ponudnikom podatkov, saj se pogovarja s skoraj vsako obstoječo večjo bazo podatkov.

Resnično uporabna funkcija, povezana z bazo podatkov, je zmožnost ustvarjanja diagrama modelov, boljše je prikazati, kako se vaši modeli med seboj navezujejo. Če želite omogočiti to funkcijo, boste morali namestiti knjižnico pygraphviz.

Web2py z integrirano podporo za jQuery in AJAX ponuja številne druge profesionalne komponente: funkcije internacionalizacije, več metodologij predpomnjenja, nadzor dostopa in avtorizacijo ter celo prednje učinke (na primer izbirnik datumov v obrazcih). Vključeni so tudi kljuke za zunanjo in notranjo vmesno programsko opremo, čeprav vmesne programske opreme ne smete zamenjati za osnovne funkcije Web2py.

Pomembna omejitev Web2py je, da je združljiv samo s Python 2.x. Za enega to pomeni, da Web2py ne more uporabljati asinhrane sintakse Python 3. Če se zanesete na zunanje knjižnice, ki so ekskluzivne za Python 3, potem nimate sreče. Vendar potekajo prizadevanja za uskladitev Web2py Python 3 in je že skoraj v zaključku.

Ni čudno, da se dokumentacija Web2py imenuje "knjiga". Najprej zajema neverjetno veliko gradiva v Web2py, Python in okoljih za uvajanje, ki se uporabljajo za oba. Drugič, napisano je v zelo dostopnem, pripovednem slogu. Tretjič, poglobljeno govori o običajnih scenarijih oblikovanja aplikacij. Obstaja na primer celo poglavje o uporabi jQuery (v kompletu z Web2Py) za izdelavo aplikacij AJAX.

Weppy

Weppy se počuti na pol poti med minimalno preprostostjo Flaska in popolnostjo Djanga. Medtem ko ima aplikacija Weppy enostavnost Flash, ima Weppy številne funkcije, ki jih najdemo v Djangu, na primer podatkovne plasti in preverjanje pristnosti. Weppy je tako primeren za aplikacije, ki segajo od zelo preprostih do skromno dovršenih.

Koda Weppy je na prvi pogled zelo podobna kodi bučke ali steklenice. Za vzpostavitev in delovanje osnovnega spletnega mesta z eno potjo je potrebnih le nekaj navodil. Poti se lahko opišejo prek okrasnih funkcij (na enostaven način) ali programsko, sintaksa za to pa se tesno prilega na bučko / steklenico. Predloge delujejo približno enako, razen manjših sprememb v sintaksi.

Weppy je v nasprotju s temi drugimi okviri, saj vključuje nekatere funkcije, ki jih vsebujejo samo kot vtičnike ali dodatke. Niti Flask niti Bottle nimata vgrajenega ORM ali sistema za upravljanje podatkov. Weppy vključuje ORM, čeprav tak, ki temelji na projektu pyDAL in ne na bolj priljubljeni SQLAlchemy. Weppy celo podpira migracije shem, ki jih Django podpira kot del ORM (tudi Djangov sistem za selitev je veliko bolj avtomatiziran). Medtem ko ima Weppy razširitveni mehanizem, je seznam uradno odobrenih dodatkov majhen, veliko manjši od kataloga razširitev za Flask.

Lažji ogrodji, kot je Weppy, se pogosto uporabljajo za izdelavo RESTful API-jev, Weppy pa je v ta namen opremljen s priročnimi funkcijami. Postavite dekoraterja @service na pot in podatki, ki jih vrnete, se samodejno oblikujejo v vaši izbiri JSON ali XML.

Weppy vključuje druge funkcije, ki se zdijo bolj skladne z večjim ogrodjem, vendar so implementirane brez večjih količin. Primeri: Mehanizmi za preverjanje veljavnosti podatkov, obdelava obrazcev, predpomnjenje odzivov in preverjanje uporabnika. V vseh teh primerih ima Weppy pristop "ravno dovolj". Navedene funkcije niso tako popolne, kot bi jih lahko našli v ogrodju velikosti Django, vendar razvijalcu ni treba vložiti veliko dela, da bi postali koristni in jih je vedno mogoče dejansko razširiti.

Druga značilnost, ki jo najdemo v Weppyju in je običajno povezana z bolj težkim okvirom, je podpora za internacionalizacijo. Strune v predlogah je mogoče prevesti v skladu s krajevnimi datotekami, priloženimi aplikaciji, ki so preprosti slovarji Python. Izbira jezika lahko nastavite tudi z razčlenjevanjem zahteve brskalnika (to je glave HTTP Accept-Language) ali z vezavo prevoda na določeno pot.

Weppyjeva dokumentacija ima enak okus kot sam okvir. Je čist, berljiv in napisan, da ga ljudje zaužijemo. Poleg običajnega primera aplikacije "hello world" vključuje lepo vadnico, ki vam omogoča, da kot začetni projekt ustvarite sistem mikroblogiranja.

Dolgoročni načrti za Weppy vključujejo podporo async in vtičnic kot prvovrstne entitete na nizki ravni. Razvijalci Weppy nameravajo te funkcije predstaviti v različici 2.0 in nato za vse prihodnje različice Weppyja zahtevati Python 3.7 ali novejšo različico.

PreglednicaDomača sposobnost (20%) Upravljanje (20%) Namestitev (20%) Dokumentacija (20%) Varnost (10%) Razširljivost (10%) Skupna ocena (100%)
Steklenica 0,1281010877 8.6
CherryPy 17.0.0799988 8.4
CubicWeb 3.26.410871097 8.6
Django 2.11088101010 9.2
Falcon 1.4.17108877 8.0
Bučka 1.0.2898988 8.4
Piramida 1.9.28881097 8.4
Tornado 4.3899887 8.3
Web.py 0.398810898 8.5
Web2py 2.16.110971098 8.9
Weppy 1.2.1110899109 9.1
Wheezy.web 0.1.485998888 8.4
Zope2 2.13.241087999 8.6
$config[zx-auto] not found$config[zx-overlay] not found