5 velikih i moćnih Python mrežnih okvira

Kada napravite pozadinu za web stranicu ili uslugu, čak i onu koja se na prvi pogled čini skromnom, brzo ćete otkriti da je to sve samo ne. Ispostavlja se da je čak i "jednostavno" mjesto košnica složenosti. Upravljanje korisnicima, dizajn podataka, podnošenje obrazaca, sigurnost - dosadno provođenje svega toga postaje zamorno.

Za one velike web projekte, kad znate da će vam trebati sve, plus kuhinjski sudoper, najbolje je okrenuti se okviru koji dolazi s baterijama (i punjačima). Evo pet teških web okvira za Python koji dolaze sa svime što vam je potrebno za izgradnju robusnih web aplikacija, a zatim i neki.

CubicWeb

CubicWeb se naplaćuje kao "semantički okvir web aplikacija koji favorizira ponovnu upotrebu i objektno orijentirani dizajn." To je intrigantan sustav - kao što je primijetio Rick Grehan kada ga je pregledao još 2011. godine - koji naglašava upotrebu apstrakcija i višekratnih građevinskih blokova koda nazvanih "kocke". U stvari, CubicWeb bi mogao biti previše apstraktan ili idiosinkratičan za neke programere, a njegova brzina razvoja i skup značajki zaostaju za drugim okvirima.

Kocke su softverske komponente koje sadrže shemu (model podataka), entitete (programska logika) i poglede. Sastavljanjem više kockica, svaka izvršavajući svoj zadatak, možete sastaviti softverske aplikacije ponovnom upotrebom vlastitog i kodova drugih.

U svojoj osnovi, CubicWeb pruža osnovne skele koje koristi svaka web aplikacija: "spremište" za podatkovne veze i pohranu; "web engine" za osnovne HTTP zahtjeve / odgovore i CRUD radnje; i shemu za modeliranje podataka. Sve je to opisano u definicijama klase Python.

Da biste postavili i upravljali instancama CubicWeba, radite s alatom naredbenog retka sličnim onom koji se koristi za Django. Ugrađeni sustav predložaka omogućuje vam programsko generiranje HTML rezultata. Također možete koristiti kocku koja pruža alate za web korisničko sučelje, poput one za Bootstrap HTML okvir.

Iako CubicWeb podržava Python 3 (od verzije 3.23), čini se da ne koristi izvornu async funkcionalnost Pythona 3. Kružni način za uključivanje async bio bi korištenje modula cubicweb.pyramid za korištenje okvira Pyramid kao web poslužitelja i crtanje na račvanju Pyramida koji koristi async konstrukcije. Također je moguće izvršavati zadatke asinkrono s kockom radne kubične mreže. Ali sve što je izravnije za sada se čini nedostižnim.

Da biste dohvatili ili manipulirali trajnim podacima u aplikaciji CubicWeb, koristite Relation Query Language (RQL), koji koristi nejasno sintaksu nalik SQL-u, ali je oblikovan kao Warcov SparQL. CubicWebovo opravdanje za ovo je, opet, apstrakcija: RQL pruža jako nevezanu rutu za međusobno povezivanje različitih izvora podataka.

Budući da CubicWeb ima puno ovisnosti, najbolje je koristiti ih pip installza dohvaćanje svih. Možda ćete morati izvršiti i određenu količinu ručnog podešavanja lokalnog okruženja. To je za razliku od ostalih okvira gdje je potrebno pokretanje pip installili ispuštanje koda okvira u podmapu drugog projekta. Ili biste mogli upotrijebiti Docker spremnik da pokrenete stvari.

CubicWeb svoju podužu dokumentaciju naziva "knjigom". Autori knjige izdvojili su vrijeme da objasne neobičan pristup CubicWeba, pokažu kako se grade neke osnovne aplikacije, uključuju API reference i općenito se trude biti konkretni.

CubicWeb je i dalje pod aktivnim, iako sporim razvojem. Planovi za CubicWeb 4.0 pripremaju se od 2012. godine, ali još nije ponuđena vremenska crta za njegovo isporučivanje.

Django

U desetljeću i promjenama od kada se Django prvi put pojavio, postao je jedan od Pythonovih najrasprostranjenijih okvira za stvaranje web aplikacija. Django dolazi s većinom svake baterije koja vam može zatrebati, što ga čini prikladnijim za izgradnju velikih aplikacija od malih.

Django je proveo mnogo godina sjedeći u verziji 1.x. Kada je Django 2.0 stigao krajem 2017. godine, odustao je od kompatibilnosti s Pythonom 2 u korist Pythona 3.4 i novijih. Django 3.0, objavljen u prosincu 2019. godine, zahtijeva Python 3.6 ili noviji i dodaje podršku za novi asinkroni ASGI standard za Python web aplikacije.

Ključni dio Djangove žalbe je brzina implementacije. Budući da Django uključuje toliko dijelova koji su vam potrebni za razvoj prosječne web aplikacije, možete se brzo pokrenuti. Usmjeravanje, raščlanjivanje URL-ova, povezanost baze podataka, uključujući ORM (objektno-relacijsko mapiranje), provjera valjanosti obrazaca, zaštita od napada i predlošci su svi ugrađeni.

Pronaći ćete blokove za najčešće scenarije web aplikacija. Na primjer, upravljanje korisnicima nalazi se na većini web stranica, pa ga Django nudi kao standardni element. Umjesto da morate stvoriti vlastiti sustav za praćenje korisničkih računa, sesija, lozinki, prijava / odjava, administratorskih dozvola i tako dalje, Django te značajke nudi izvorno. Mogu se koristiti takvi kakvi jesu ili ih proširiti kako bi obuhvatili nove slučajeve upotrebe uz minimalan rad.

Django ima zdrave i sigurne zadane postavke koje pomažu zaštiti vaše web aplikacije od napada. Kada smjestite varijablu u predložak stranice, poput niza s HTML-om ili JavaScriptom, sadržaj se ne prikazuje doslovno ako izričito ne odredite instancu varijable kao sigurnu. To samo po sebi uklanja mnoge uobičajene probleme skriptiranja na više web lokacija. Ako želite izvršiti provjeru valjanosti obrasca, možete koristiti sve, od jednostavne CSRF zaštite do cjelovitih mehanizama provjere valjanosti po polja koji vraćaju detaljne povratne informacije o pogreškama.

Tako bogata i široka značajka poput Djangove ne bi bila dobra bez robusne dokumentacije koja bi išla uz nju. Django dokumentacija analizira svaki aspekt okvira iz više kutova. Rad s Pythonom 3 ili drugim okusima jezika, ispravno obavljanje sigurnosnih zadataka, implementacija uobičajenih komponenata web aplikacija (poput sesija ili paginacije), generiranje mapa web mjesta - sve su pokrivene. Također su detaljno opisani API-ji za svaki sloj aplikacije - model, prikaz i predložak.

No s velikom snagom dolazi i velika složenost. Django aplikacije slove kao izuzetno teške, prepune mnogih pokretnih dijelova. Čak i jednostavna Django aplikacija zahtijeva priličnu količinu konfiguracije da bi se pokrenula. Ako vam je cilj učiniti nešto više od postavljanja nekoliko jednostavnih REST krajnjih točaka, Django je gotovo sigurno pretjeran.

Django također ima svojih hirova. Na primjer, predlošci stranica ne mogu koristiti pozive. Primjer: Možete proslijediti {{user.name}}kao komponentu u predlošku, ali ne {{user.get_name()}}. To je jedan od načina na koji Django osigurava da vam predlošci nenamjerno ne pucaju u nogu, ali ta ograničenja mogu biti neskladna ako za njih niste spremni. Iako postoje zaobilazna rješenja, oni obično uzimaju danak u učinku.

Od verzije 3.0, Django je dodao podršku za asinkrone poglede. Nažalost, još uvijek nema podrške za async u drugim dijelovima Django stoga, poput ORM-a. Ali Django možete implementirati pomoću ASGI-a kako biste u potpunosti iskoristili asinkrene prikaze.

Web2py

U svijetu programiranja Ruby, Ruby on Rails je de facto mrežni okvir. Profesor informatike Sveučilišta DePaul Massimo Di Pierro inspiriran je Railsom za stvaranje mrežnog okvira u Pythonu koji je na sličan način jednostavan za postavljanje i upotrebu. Rezultat je Web2py.

Najveća atrakcija Web2py-a je njegovo ugrađeno razvojno okruženje. Kada postavite instancu Web2py, pruža vam se web sučelje, u osnovi mrežni uređivač aplikacija Python, u kojem možete konfigurirati komponente aplikacije. To obično znači stvaranje modela, pogleda i kontrolera, koji su svaki opisani putem Python modula ili HTML predložaka. Nekoliko primjera aplikacija dolazi s Web2pyjem iz kutije. Možete ih razdvojiti da biste vidjeli kako rade ili ih iskoristiti kao početne predloške za stvaranje vlastitih aplikacija.

Programeri obično implementiraju Web2py preuzimanjem izvornog koda i nadogradnjom na tome. Ali za manje tehničke korisnike u sustavu Windows ili MacOS, tvorci Web2py-a nude verzije koje su u osnovi samostalni poslužitelji. Preuzmite, raspakirajte i pokrenite jednu od ovih verzija i dobit ćete lokalni web poslužitelj s unaprijed konfiguriranom kopijom ugrađenog Web2pyja. Ovo je lijep način za pokretanje postupka izrade aplikacije Web2py koja se prema potrebi može rasporediti negdje drugdje.

Web sučelje Web2py izgrađeno je pomoću Bootstrapa 4, tako da je lako za oči i lako se kretati. Uređivač u pregledniku nije zamjena za potpuno razvijeni IDE, ali opremljen je korisnim pomagalima poput numeriranja redaka i isticanja sintakse Python (uključujući automatsko uvlačenje). Uključeno je i brzo web sučelje za Python ljusku, tako da s naredbenim retkom možete komunicirati s Web2py - što je lijep ustupak stručnjacima.

Sustav za apstrakciju podataka koji se koristi u Web2py djeluje malo drugačije od Djangovog ORM-a i ostalih ORM-a nadahnutih njime (kao što je Peewee). Ti sustavi koriste Python klase za definiranje modela, dok Web2py koristi konstruktorske funkcije poput define_tableinstanciranja modela. Razlike će vjerojatno biti neskladne samo ako ste navikli na drugi način; ne bi smjeli zamajavati pridošlice. Vjerojatno nećete imati problema s povezivanjem Web2py-a s davateljem podataka, jer razgovara sa gotovo svakom većom postojećom bazom podataka.

Doista korisna funkcija vezana uz bazu podataka u Web2py je sposobnost generiranja dijagrama modela, što vam omogućuje da vizualizirate kako se vaši modeli međusobno povezuju. Ipak ćete trebati instalirati knjižnicu PyGraphviz da biste omogućili tu značajku.

Web2py isporučuje mnoge druge profesionalne komponente: funkcije internacionalizacije, više metoda predmemoriranja, kontrolu pristupa i autorizaciju, pa čak i prednje efekte (na primjer, birač datuma u obrascima) putem integrirane podrške za jQuery i AJAX. Uključene su i kuke za vanjski i unutarnji međuprodukt, iako nije dopušteno koristiti međuopreme za zamjenu osnovnih funkcija Web2py. Međutim, još uvijek nije izričito korištena Pythonova async funkcionalnost u Web2pyu, iako postoji rokovnik za rukovanje dugotrajnim zadacima. 

Nije ni čudo što se dokumentacija Web2py-a naziva "knjigom". Prvo, pokriva zapanjujuću količinu materijala na Web2py, Python i okruženjima za implementaciju koja se koriste za oba. Drugo, napisan je u vrlo pristupačnom, narativnom stilu. Treće, detaljno govori o uobičajenim scenarijima izgradnje aplikacija. Postoji, na primjer, cijelo poglavlje o korištenju jQuery za izgradnju AJAX aplikacija.

Weppy

Weppy se osjeća na pola puta između minimalne jednostavnosti Flaska i potpunosti Djanga. Dok razvija Weppy aplikaciju koja ima jednostavnost Flasha, Weppy dolazi s mnogim značajkama koje se nalaze u Djangu, poput slojeva podataka i provjere autentičnosti. Dakle, Weppy je prilagođen aplikacijama koje se kreću od izuzetno jednostavnih do skromno sofisticiranih.

Na prvi pogled Weppy kôd izgleda poput kode tikvice ili kode boce. Potrebno je nekoliko uputa za pokretanje osnovnog web mjesta s jednom rutom. Rute se mogu opisati putem dekoratora funkcija (jednostavan način) ili programski, a sintaksa za to usko je usko povezana s tikvicom / bocom. Predlošci djeluju otprilike isto, osim manjih varijacija u sintaksi.

Weppy je u kontrastu s onim manjim okvirima tako što uključuje neke značajke koje uključuju samo kao dodatke ili dodatke. Na primjer, ni tikvica ni boca nemaju ugrađeni ORM ili sustav za upravljanje podacima. Weppy uključuje ORM, iako onaj koji se temelji na projektu pyDAL, umjesto daleko popularnije SQLAlchemy. Weppy čak podržava migracije shema, koje Django podržava kao dio svog ORM-a (Djangov sustav migracije također je mnogo automatiziraniji). Iako Weppy ima mehanizam proširenja, popis službeno odobrenih dodataka je mali, daleko manji od kataloga proširenja za Flask.

Lakši okviri poput Weppy često se koriste za izradu RESTful API-ja, a Weppy u tu svrhu ima funkcije praktičnosti. Stavite @serviceuređivač na rutu i podaci koje vratite automatski se formatiraju po vašem izboru JSON ili XML.

Weppy uključuje i druge značajke koje se čine više u skladu s većim okvirom, ali se provode bez masovnih podataka. Primjeri uključuju mehanizme provjere valjanosti podataka, rukovanje obrascima, predmemoriranje odgovora i provjeru valjanosti korisnika. U svim tim slučajevima Weppy zauzima pristup "taman toliko". Navedene značajke nisu cjelovite kao što biste mogli pronaći u Djangu i drugim teškim okvirima, ali programer ne treba ulagati puno rada da bi ih učinio korisnima, a oni se uvijek mogu proširiti nakon činjenice.

Još jedna značajka teškog okvira koja se nalazi u Weppyju je podrška za internacionalizaciju. Nizovi u predlošcima mogu se prevesti prema lokalnim datotekama koje se dobivaju uz aplikaciju, a to su jednostavni Python rječnici. Izbor jezika može se postaviti i raščlanjivanjem zahtjeva preglednika (odnosno HTTP zaglavlja Accept-Language) ili vezivanjem prijevoda na određenu rutu.

Weppyjeva dokumentacija ima isti okus kao i sam okvir. Čist je, čitljiv i napisan da ga ljudi konzumiraju. Osim uobičajenog primjera "hello world", on uključuje i lijep vodič za prolazak koji vam omogućuje stvaranje sustava mikrobloga kao početni projekt.

Dugoročni planovi za Weppy uključuju podršku za async i utičnice kao prvoklasne cjeline niske razine. Weppyjevi programeri planiraju predstaviti te značajke u verziji 2.0, a zatim zahtijevati Python 3.7 ili noviji za sve buduće verzije Weppy.

Zope