cadrele Python pot fi împărțite în câteva domenii, deoarece Python este un limbaj foarte divers și poate fi utilizat în diverse domenii. Fiecare dintre aceste domenii are propriile cadre, dintre care unele sunt mai populare decât altele. Unul dintre cele mai populare domenii în care se aplică Python este dezvoltarea web, pe care ne vom concentra astăzi.cadrele prezentate pot fi împărțite în trei categorii: cadre full stack, care oferă o mulțime de caracteristici out of the box pentru partea de server și client; microframeworks, care oferă suport server-side (uneori, ele pot fi extinse la partea de client) și permit crearea unei aplicații web Doar prin utilizarea unui singur fișier Python; și, în cele din urmă, cadre asincrone, care gestionează cererile asincron.
cadre Web Full-stack
Django
Django este una dintre cele mai populare cadre Python. Acesta oferă o mulțime de funcționalități out-of-the-box, cum ar fi Panoul de administrare sau vederi generice și forme. Principalele caracteristici ale Django sunt:
-
un script de gestionare („manage.py”) care poate fi folosit pentru efectuarea majorității acțiunilor specifice cadrului (cum ar fi pornirea serverului de dezvoltare, crearea unui utilizator admin, colectarea fișierelor statice etc.),
-
procesare sincronă a solicitărilor,
-
MTV (model-șablon-vizualizare) model de arhitectură (care este variația modelului model-vizualizare-controler),
-
mapare relațională a obiectelor personalizate (ORM) pentru comunicarea cu baza de date,
-
utilizarea funcțiilor și claselor pentru crearea contextului de vizualizare și manipularea acțiunilor,
-
Django este strict și forțează propriul stil de codificare pe dezvoltator-o mulțime de programare meta,
-
foarte bună documentație, extinse cu exemple,
-
template – uri HTML personalizate de redare sistem de rutare URL personalizat,
-
respectarea standardului WSGI,
-
suport pentru fișiere statice – rutare URL, precum și detectare și colectare,
-
un număr mare de module externe, de exemplu, Django REST Framework, Django CMS, canale Django (websockets).
Django este potrivit pentru proiecte mai mari, unde este nevoie de suport extins pentru backend și frontend sau în cazurile în care timpul joacă un rol crucial, deoarece Django oferă un număr mare de componente gata. Codificarea în Django se bazează în mare parte pe personalizarea părților generice ale codului. Dezvoltatorul trebuie să urmeze un set de reguli care vin cu elementul dat. Pentru proiectele în care se dorește multă flexibilitate a codului, Django ar putea să nu fie cea mai bună alegere.
37,514 Stele Github / 183,588 StackOverflow întrebări
Web2py
Web2py se concentrează pe securitate, viteza de dezvoltare și ușurința de utilizare. Acesta oferă o mulțime de caracteristici din cutie: un server web, baza de date, Panoul de administrare, wiki sau widget-uri grilă. Principalele caracteristici ale cadrului sunt:
-
prelucrare cerere sincron,
-
strat de bază de date abstractizare personalizat (DAL), care acționează ca ORM,
-
forțează o structură MVC,
-
funcții și clase pot fi utilizate pentru crearea de controlere,
-
strict „ar trebui să existe doar un singur mod de a face lucrurile” filozofie,
-
documentație bogată cu o mulțime de exemple,
-
motor HTML personalizat care permite cod Python pentru a fi utilizate în șabloanele,
-
rutare personalizat – funcția URL care generează căi interne pentru acțiunile și fișierele statice,
-
suport pentru standardul WSGI, dar este posibil să se utilizeze CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) sau altele,
-
oferă rutare și streaming de fișiere statice în timpul dezvoltării,
-
are servicii REST încorporate, dar necesită cadrul Tornado pentru utilizarea soclului Web.
Web2py a fost foarte inspirat de Ruby on Rails și Django cadre și ia ceea ce este cel mai bun de la ambele dintre ele.
poate fi o alegere bună pentru programatorii care doresc să migreze de la Ruby sau pentru cei care se plictisesc de Django, dar caută un alt cadru mare și bogat în funcții.
oferă o aplicație „admin”, care acționează ca un IDE bazat pe web pentru dezvoltarea și gestionarea aplicațiilor (de exemplu, creații de aplicații, editor de cod). De asemenea, este susținută de PyCharm.
În general, Web2Py nu lipsește nici funcționalități care Django are. Aceste două cadre pot fi utilizate pentru a îndeplini aceleași sarcini. Web2Py este mai tânăr și are o comunitate mai mică decât Django, deci ar putea fi puțin mai greu să găsești ajutor în caz de probleme.
1665 GitHub Stele / 2004 StackOverflow întrebări
TurboGears
TurboGears conectează o mulțime de servicii externe pentru a crea un cadru funcțional:
-
prelucrare cerere sincron,
-
model-view-controller (MVC),
-
foloseste SQLAlchemy ORM,
-
permite utilizarea funcțiilor și generarea de context vedere de clasă,
-
acesta oferă unele clase generice gata de utilizare (APIController foarte interesant pentru odihnă API),
-
documentația este un pic haotic, dar ar putea fi o chestiune de a te obișnui cu ea,
-
utilizează limbajul șablon Kajiki,
-
url personalizat rutare/metode de expediere,
-
compatibil cu WSGI standard,
-
suporta configuratii statice de cale fișiere
-
poate fi extins cu module suplimentare, de exemplu, Circus și Chaussette pentru suport Sockets Web.
cadrul nu este la fel de popular ca și cei doi predecesori, dar totuși merită verificat.
259 Stele GitHub / 107 StackOverflow întrebări
Microframeworks
balon
este una dintre cele mai populare microframeworks Python, este fiabil și rapid. Se spune că a fost creat ca o glumă. Principalele caracteristici ale cadrului sunt:
-
suport cerere sincron,
-
nu forțează nici o arhitectură de proiect, dar are unele recomandări (pachet, modul, planuri),
-
nu oferă ORM, dar SQLAlchemy sau alte pot fi utilizate,
-
sprijină funcții, precum și unele Django-ca vederi de clasă generice (pornind de la balon 0.7),
-
stil de codare loose, aceasta nu forțează nici o soluție, cele mai multe decizii sunt lăsate la latitudinea dezvoltatorului,
-
documentație bună cu exemple,
-
este posibil să se utilizeze Jinja2 Html Template engine,
-
Werkzeug sistem de rutare,
-
compatibil cu WSGI standard,
-
suporta rutare fișier static de bază,
-
poate fi extins cu unele module suplimentare terțe părți, de exemplu, flask-restful pentru crearea REST API sau flask-socketio pentru suport sockets web.
acest cadru va face truc în proiecte mici și mijlocii. Are câteva module terțe care sunt gata de utilizare, precum și soluții native bune. Flask ar trebui să se dovedească în locuri de muncă în cazul în care sunt necesare caracteristici personalizate complicate, dar Django pare prea mare pentru sarcina. Pe de altă parte, setarea Flask pentru un proiect mai mare de la început poate fi dificilă, deoarece nu există un mod „oficial” de a face acest lucru.
39,946 Stele Github / 24,512 StackOverflow întrebări
Piramida
Piramida începe cu o instalare minimă, care poate fi extins atunci când este necesar. Este demn de remarcat faptul că este o parte a proiectului Pylons, care integrează tehnologii legate de web.
acestea sunt unele dintre cele mai importante caracteristici ale piramidei:
-
oferă prelucrare cerere sincron,
-
vizualizări contexte pot fi definite cu funcții, precum și clase,
-
nu există nici un ORM specific, dar se recomandă SQLAlchemy,
-
nu forțează nici un stil de codificare sau arhitectura de proiect – TIMTOWTDI,
-
oferă documentație bună cu tutoriale și exemple,
-
nu este livrat un motor de șablon HTML specific, dar este recomandat chameleon,
-
un sistem de rutare personalizat interesant permite mai multe vizualizări să se potrivească cu o adresă URL,
-
este compatibil WSGI,
-
suport extins pentru fișiere statice – fișiere care servesc, rutare URL pentru fișiere statice,
-
poate fi extins cu module externe, de exemplu, cornișă pentru API-uri REST, aiopyramid cu suport asincron.
acest cadru ar putea fi o alegere bună în cazurile în care nu doriți să petreceți timp învățând soluții personalizate de cadre (cum ar fi ORM), dar totuși aveți nevoie de un instrument extins pentru construirea software-ului, deoarece Pyramid acceptă utilizarea multor soluții de sine stătătoare cunoscute.
are capacități bune de scalare – se face publicitate ca un cadru care poate „începe mic și termina mare”.
2974 GitHub întrebări/2060 StackOverflow întrebări
CherryPy
permite crearea de aplicații web în același mod ca și proiect Python orientat-obiect. Nu are funcționalități complete și nu forțează soluții specifice – dezvoltatorul poate decide cum să rezolve problemele care apar în timpul dezvoltării. Caracteristicile CherryPy sunt:
-
oferă suport cerere sincron,
-
nu forțează nici o structură de proiect sau arhitectura,
-
nu oferă nici ORM, dar SQLAlchemy sau sqlobject pot fi utilizate,
-
nu oferă nici un motor șablon HTML,
-
are un stil de codificare liber,
-
oferă documentație decentă,
-
rutele sistemului de rutare (versiunea Python a sistemului de rutare a șinelor) pot fi utilizate,
-
este compatibil cu WSGI,
-
are suport bun pentru fișierele statice – permite servirea fișierelor sau a fișierelor întregi directoarele,
-
permite crearea API-urilor REST numai cu instrumente încorporate,
-
facilitează utilizarea soclurilor Web prin intermediul modulului ws4py.
principalul avantaj al CherryPy este că vine cu un server WSGI gata de producție, care elimină necesitatea înființării unui server extern în timpul implementării. principalul dezavantaj al acestui cadru este că nu este foarte popular, prin urmare, are un număr mai mic de module externe și o comunitate mai puțin vibrantă.
829 GitHub stars / 1244 StackOverflow întrebări
BottlePy
este încă un alt microframework care se face publicitate la fel de rapid și simplu. Este demn de remarcat faptul că BottlePy este livrat ca un singur modul fără dependențe suplimentare. Caracteristicile:
-
implementează gestionarea sincronă a cererilor,
-
oferă un motor HTML personalizat, dar ar putea fi utilizate alte motoare, cum ar fi Mako, Jinja2 sau Cheetah,
-
nu livrează ORM, dar este posibil să se utilizeze soluții externe, de ex. SQLAlchemy sau Macaron,
-
nu forțează nici o arhitectură de proiect,
-
oferă documentație suficientă,
-
are un sistem de rutare personalizat, dar sistemul de rutare Werkzeug poate fi utilizat (prin sticla-werkzeug),
-
implementează standardul WSGI,
-
oferă fișier de rutare,
-
oferte greenlets (cu gevent) ca soluție de manipulare cerere asincron,
-
este posibil să se creeze REST API fără module externe – suporta date client JSON.
datorită dimensiunii sale mici (doar un fișier) și fără dependențe externe (numai biblioteca standard Python) necesare, poate fi o alegere bună pentru începătorii care doresc să înceapă să învețe dezvoltarea web.
S-ar putea face, de asemenea, o treabă bună cu site-uri foarte mici sau teste de unică folosință. BottlePy nu va fi cea mai bună alegere pentru proiecte de dimensiuni medii sau mai mari, deoarece ar necesita o muncă pentru a ajunge la punctul în care încep cadrele mai grele.
5,795 GitHub stars / 1,288 StackOverflow întrebări
cadre asincrone
Aiohttp
este un cadru extins Python asincron. Acesta oferă un server cu semnale middleware opriri grațioase și multe altele:
-
manipulare cerere asincron, client și server websockets,
-
este posibil să se utilizeze GINO async ORM,
-
sprijină funcția și vederi bazate pe clasă,
-
documentație suficientă, dar un pic cam greu pentru a naviga,
-
este posibil să se utilizeze SQLAlchemy pur, dar Gino ca un înveliș asincron este recomandat,
-
sprijină postgres, MySQL, Redis drivere asincron,
-
Nu out-of-the-box motor șablon, dar Jinja2 sau Mako ar putea fi aplicate,
-
sistem de rutare personalizat,
-
Nu suport WSGI,
-
suporta rutare pentru fișiere statice,
-
o mulțime de module terțe părți, care pot extinde în continuare cadrul, de exemplu, aiohttp-apispec pentru crearea REST API, aiohttp-securitate pentru autentificări utilizatorilor și permisiuni.
deoarece oferă o mulțime de caracteristici din cutie (de exemplu, suport pentru client și server părți, websockets, middleware, semnale), Aiohttp ar putea fi utilizat cu proiecte de dimensiuni medii (sau chiar cu cele mai mari).
6,378 GitHub stars / 503 StackOverflow întrebări
Sanic
Sanic este un cadru foarte balon ca: este mic, liberal, și lasă o mulțime de spațiu pentru Dezvoltator. Principala sa caracteristică definitorie este viteza sa.
iată câteva alte caracteristici:
-
suport pentru async cerere handler,
-
nu oferă nici interfețe de baze de date, dar GINO async ORM poate fi instalat,
-
oferă funcția și clasa ca sursă de vedere context,
-
stil de codificare este destul de liber, foarte similar cu balon,
-
documentație livrate cu „readthedocs”,
-
Jinja2 html template engine poate fi folosit,
-
sistem de rutare personalizat,
-
nu este compatibil WSGI în mod implicit, dar un modul terță parte (sanic-dispecer) poate fi instalat pentru a sprijini,
-
are rutare fișier static,
-
poate fi extins cu module suplimentare, de exemplu, Sanic CRUD pentru crearea API REST.
ar trebui să fie o decizie bună să alegeți Sanic atunci când ați avut deja o experiență cu Flask, deoarece aceste două cadre au multe în comun.
Sanic oferă manipulare de configurare implicit, în timp ce în aiohttp menționat anterior, utilizatorul trebuie să o facă pe cont propriu. Are câteva module terțe interesante, cum ar fi un limitator al ratei de solicitare sau o integrare GraphQL.
10,625 GitHub stars/58 StackOverflow întrebări
Tornado
Tornado este un cadru Web Python și bibliotecă de rețea asincron, dezvoltat inițial la FriendFeed (un site de agregare socială). Datorită acestui fapt, oferă o integrare încorporată cu servicii sociale precum Google, Facebook și Twitter.
integrarea cu alte cadre și biblioteci este de asemenea posibilă: Aplicații Twisted, asyncio sau chiar WSGI. Caracteristici Tornado lui:
-
oferă o mulțime de clase generice care pot fi utilizate pentru crearea aplicației, de ex. Pentru websockets,
-
motor șablon HTML personalizat,
-
documentație clară și ușor de citit,
-
funcțiile și clasele pot fi utilizate pentru definirea acțiunilor și a cererilor de manipulare,
-
manipulare rutare personalizată-oferă clase generice decât pot fi utilizate pentru crearea rutelor,
-
suportă WSGI, dar nu este recomandat-utilizatorul ar trebui să utilizeze propriile interfețe Tornado în schimb,
-
suport websockets out – of – the-box, autentificare (de ex. (cum ar fi semnarea cookie-urilor sau protecția XSRF),
-
nu sunt necesare instrumente suplimentare pentru crearea API-ului REST.
cadrul ar trebui să funcționeze bine în cazurile în care există o mulțime de conexiuni de intrare care pot fi gestionate rapid sau în soluții în timp real, de exemplu, chat-uri.
Tornado încearcă să rezolve problema c10k viteza de procesare atât de mare este o prioritate.
un alt avantaj al Tornado este sprijinul său nativ pentru serviciile sociale. Acest cadru nu va fi o alegere bună pentru crearea de site-uri standard crude sau aplicații de afaceri mari, deoarece nu a fost conceput pentru a fi utilizat în acest fel. Pentru proiecte mai mari, acesta poate fi integrat cu aplicațiile WSGI ca parte a structurii lor mai mari și poate avea grijă de sarcini care necesită viteze mari de manipulare.
16,768 GitHub stars/3,263 StackOverflow întrebări
rezumat
cadrele web prezentate mai sus sunt doar o mică bucată dintr-o familie mai mare și mai largă de cadre Python.
fiecare soluție are punctele sale forte și slabe și, ca în orice altceva, nu există o potrivire perfectă care să rezolve fiecare sarcină dată.
cele mai importante întrebări la care trebuie să răspundem atunci când alegem cadrul sunt dictate de probleme care trebuie rezolvate.
- dacă este necesară o asistență extinsă pe partea de server și browser, atunci un cadru Full-stack ar putea fi o alegere bună.
- pentru proiecte mai mici sau în cazul în care flexibilitatea în scris cod este o prioritate, un microframework poate fi mod de a merge.
- în cazurile în care viteza de procesare cerere joacă un rol important sau un proiect va trebui să se ocupe de timpi de răspuns lungi, cadru asincron ar trebui să facă truc.