Python keretrendszerek összehasonlítása: Django, Pyramid, Flask, Sanic, Tornado, BottlePy és így tovább

A Python keretek néhány területre oszthatók, mivel a Python nagyon változatos nyelv, és különböző területeken használható. Ezen mezők mindegyikének megvan a maga kerete, amelyek közül néhány népszerűbb, mint mások. A Python egyik legnépszerűbb területe a webfejlesztés, amelyre ma összpontosítunk.

a bemutatott keretrendszerek három kategóriába sorolhatók: full stack keretrendszerek, amelyek sok, a dobozon kívüli funkciót kínálnak a szerver és a kliens oldal számára; microframeworks, amelyek szerver oldali támogatást nyújtanak (néha kiterjeszthetők a kliens oldalra), és lehetővé teszik egy webes alkalmazás létrehozását egyetlen Python fájl használatával; és végül aszinkron keretrendszerek, amelyek aszinkron módon kezelik a kéréseket.

Full-stack webes keretrendszerek

Django

a Django az egyik legnépszerűbb Python keretrendszer. Számos Out-of-the-box funkciót kínál, mint például az Admin Panel vagy az általános nézetek és űrlapok. Django főbb jellemzői:

  • egy kezelő szkript (“manage.py”), amelyek felhasználhatók a legtöbb keretspecifikus művelet végrehajtására (például a fejlesztői szerver indítására, admin felhasználó létrehozására, statikus fájlok gyűjtésére stb.),

  • szinkron kérések feldolgozása,

  • MTV (model-template-view) architektúra minta (amely a model-view-controller minta variációja),

  • egyéni objektum-relációs leképezés (ORM) az adatbázissal való kommunikációhoz,

  • függvények és osztályok használata kontextus létrehozásához és műveletkezeléséhez,

  • a Django szigorú és saját kódolási stílusát kényszeríti a fejlesztőre – sok meta programozás,

  • nagyon jó, kiterjedt dokumentáció példákkal,

  • egyedi HTML sablonok renderelése motor,

  • egyéni URL – útválasztási rendszer,

  • a WSGI szabványnak való megfelelés,

  • statikus fájlok támogatása-URL-útválasztás, valamint észlelés és gyűjtés,

  • számos külső modul, pl. Django REST Framework, Django CMS, Django Channels (websockets).

a Django jól illeszkedik nagyobb projektekhez, ahol kiterjedt backend és frontend támogatásra van szükség, vagy olyan esetekben, amikor az idő döntő szerepet játszik, mivel a Django nagyszámú kész komponenst kínál. A Django kódolása többnyire a kód általános részeinek testreszabására támaszkodik. A fejlesztő követnie kell egy sor szabályt, hogy jön az adott elem. Azoknál a projekteknél, ahol sok kód rugalmasságra van szükség, a Django nem biztos, hogy a legjobb választás.

37,514 Github csillagok / 183,588 StackOverflow kérdések
5-Sep-30-2020-01-29-47-33-PM

Web2py

a Web2py a biztonságra, a fejlesztési sebességre és a könnyű használatra összpontosít. Számos funkciót kínál a dobozból: webszerver, adatbázis, admin panel, wiki vagy rács widgetek. A keret fő jellemzői a következők:

  • szinkron kérések feldolgozása,

  • egyedi adatbázis – absztrakciós réteg (DAL), amely ORMKÉNT működik,

  • MVC struktúrát kényszerít,

  • funkciók és osztályok használhatók vezérlők létrehozására,

  • szigorú “a dolgoknak csak egy módja lehet” filozófia,

  • gazdag dokumentáció sok példával,

  • egyéni HTML motor, amely lehetővé teszi a Python kód használatát a sablonokban,

  • egyéni útválasztás-url funkció, amely belső útvonalakat generál a műveletekhez és a statikus fájlokhoz,

  • támogatja a WSGI szabványt, de lehetséges a CGI (Common Gateway Interface), a FastCGI, a Gae (Google App Engine) vagy más,

  • statikus fájlirányítást és adatfolyamot kínál a fejlesztés során,

  • beépített REST szolgáltatásokkal rendelkezik, de a Tornado keretrendszert igényli a Web Socket használatához.

a Web2py-t erősen inspirálta a Ruby on Rails és a Django keretrendszer, és mindkettőből a legjobbat veszi.
Ez lehet egy jó választás a programozók, akik szeretnének áttérni Ruby vagy azok számára, akik unják a Django, de keres egy másik nagy és funkciókban gazdag keretet.
kínál egy “admin” app, amely úgy működik, mint egy web – alapú IDE alkalmazásfejlesztés és menedzsment (pl app alkotások, kód szerkesztő). Ezt a PyCharm is támogatja.
általánosságban elmondható, hogy a Web2Py nem hiányzik a Django funkcióiból. Ez a két keret ugyanazon feladatok ellátására használható. A Web2Py fiatalabb, és kisebb közösséggel rendelkezik, mint a Django, így egy kicsit nehezebb segítséget találni baj esetén.

1,665 GitHub stars / 2,004 StackOverflow kérdések
0Python keretrendszerek összehasonlítása: Django, piramis, lombik, Sanic, Tornado, BottlePy és így tovább

TurboGears

TurboGears csatlakozik egy csomó külső szolgáltatások, hogy hozzon létre egy funkcionális keretrendszer:

  • szinkron kérés feldolgozás,

  • model-view-controller (MVC) minta,

  • használ SQLAlchemy ORM,

  • lehetővé teszi a használatát funkciók és osztály nézet kontextus generáció,

  • kínál néhány használatra kész általános osztályok (nagyon érdekes APIController a többi API létrehozása),

  • dokumentáció egy kicsit kaotikus, de lehet, hogy a kérdés, hogy megszokja,

  • használja a Kajiki sablon nyelv,

  • egyéni URL routing/dispatch módszerek,

  • megfelel a WSGI normál,

  • támogatja a statikus fájlok elérési útját

  • további modulokkal bővíthető, pl.

a keret nem olyan népszerű, mint két elődje, de ennek ellenére érdemes megnézni.

259 GitHub csillag / 107 StackOverflow kérdések
Python keretrendszerek összehasonlítása: Django, piramis, lombik, Sanic, Tornado, BottlePy és több

Microframeworks

Flask

Ez az egyik legnépszerűbb Python microframeworks, ez megbízható és gyors. Azt mondják, hogy jött létre, mint egy vicc. A keret főbb jellemzői:

  • szinkron kérés támogatás,

  • nem kényszerít semmilyen projekt architektúrát, de van néhány ajánlása (csomag, modul, tervrajzok),

  • nem kínál ORM-ot, de az SQLAlchemy vagy más használható,

  • támogatja a funkciókat, valamint néhány Django-szerű általános osztálynézetet (a lombik 0-tól kezdve.7),

  • laza kódolási stílus, nem kényszerít semmilyen megoldást, a legtöbb döntés a fejlesztő belátása szerint marad,

  • jó dokumentáció példákkal,

  • lehetséges a Jinja2 HTML sablon motor használata,

  • Werkzeug útválasztási rendszer,

  • megfelel a WSGI-nek normál,

  • támogatja az alapvető statikus fájl útválasztást,

  • bővíthető néhány további harmadik féltől származó modullal, pl. lombik-restful a REST API létrehozásához vagy lombik-socketio a webes aljzatok támogatásához.

Ez a keretrendszer megteszi a trükköt kis-és közepes projektekben. Van néhány harmadik féltől származó modul, amelyek készen állnak a használatra, valamint jó natív megoldások.
lombik kell bizonyítania magát a munkahelyek, ahol bonyolult egyéni funkciók szükségesek, de Django tűnik túl nagy a feladat. Másrészről, a lombik beállítása egy nagyobb projekthez a kezdetektől bonyolult lehet, mivel erre nincs “hivatalos” módszer.

39,946 Github stars / 24,512 StackOverflow kérdések
Python keretrendszerek összehasonlítása: Django, piramis, lombik, Sanic, Tornado, BottlePy és így tovább

piramis

A Piramis minimális telepítéssel kezdődik, amely szükség esetén meghosszabbítható. Érdemes megjegyezni, hogy ez a Pilons projekt része, amely integrálja a webhez kapcsolódó technológiákat.
Ezek a piramis legfontosabb jellemzői:

  • szinkron kérésfeldolgozást kínál,

  • nézetek kontextusok definiálhatók függvényekkel és osztályokkal,

  • nincs konkrét ORM, de az SQLAlchemy ajánlott,

  • nem kényszerít semmilyen kódolási stílust vagy projekt architektúrát – TIMTOWTDI,

  • jó dokumentációt kínál oktatóanyagokkal és példákkal,

  • nincs konkrét HTML sablon motor szállítjuk, de Chameleon ajánlott,

  • egy érdekes egyéni routing rendszer lehetővé teszi több nézetet, hogy megfeleljen egy URL,

  • Ez WSGI kompatibilis,

  • extensive static files support – fájlok kiszolgálása, URL routing statikus fájlokhoz,

  • bővíthető külső modulokkal, pl. karnis REST API-khoz, aiopyramid aszinkron Támogatással.

Ez a keretrendszer jó választás lehet olyan esetekben, amikor nem szeretne időt tölteni az egyedi keretrendszerek megoldásainak (például az ORM) tanulásával, de még mindig szüksége van egy kiterjedt eszközre a szoftverek építéséhez, mivel a Pyramid számos jól ismert önálló megoldás használatát támogatja.
jó méretezési képességekkel rendelkezik – olyan keretrendszerként hirdeti magát, amely “kicsiben indulhat és nagyot fejezhet be”.

2,974 GitHub kérdések / 2,060 StackOverflow kérdések
Python keretek összehasonlítása: Django, piramis, lombik, Sanic, Tornado, BottlePy és így tovább

CherryPy

lehetővé teszi a webes alkalmazás létrehozását ugyanúgy, mint az objektum-orientált Python projekt. Nem rendelkezik full-stack funkciókkal, és nem kényszerít semmilyen konkrét megoldást – a fejlesztő eldöntheti, hogyan oldja meg a fejlesztés során felmerülő problémákat. A CherryPy jellemzői:

  • szinkron kéréstámogatást kínál,

  • nem kényszerít semmilyen projektstruktúrát vagy architektúrát,

  • nem szállít semmilyen ORM – ot, de az SQLAlchemy vagy az SQLObject használható,

  • nem szállít HTML sablonmotort,

  • laza kódolási stílussal rendelkezik,

  • tisztességes dokumentációt kínál,

  • az útválasztási rendszer útvonalai (a Rails routing system Python verziója) használhatók,

  • megfelel a WSGI-nek,

  • jó támogatást nyújt a statikus fájlokhoz-lehetővé teszi fájlok vagy egész fájlok kiszolgálását könyvtárak,

  • lehetővé teszi a REST API-k létrehozását csak beépített eszközökkel,

  • megkönnyíti a webes aljzatok használatát a ws4py modulon keresztül.

a CherryPy fő előnye, hogy gyártásra kész WSGI szerverrel érkezik, amely kiküszöböli a külső szerver beállításának szükségességét a telepítés során.
ennek a keretrendszernek a fő hátránya, hogy nem túl népszerű, ezért kisebb számú külső modulja és kevésbé élénk közössége van.

829 GitHub stars/ 1,244 StackOverflow kérdések
Python keretek összehasonlítása: Django, piramis, lombik, Sanic, Tornado, BottlePy és így tovább

BottlePy

Ez még egy mikrokeret, amely hirdeti magát, mint a gyors és egyszerű. Érdemes megjegyezni, hogy a BottlePy egyetlen modulként kerül szállításra, további függőségek nélkül. A funkciók:

  • szinkron kéréskezelést valósít meg,

  • egyedi HTML motort kínál, de más motorok, például a Mako, a Jinja2 vagy a Cheetah is használhatók,

  • nem szállít ORM-ot, de lehetséges külső megoldások használata, pl. SQLAlchemy vagy Macaron,

  • nem kényszerít semmilyen projekt architektúrát,

  • elegendő dokumentációt kínál,

  • egyéni útválasztási rendszerrel rendelkezik, de a Werkzeug útválasztási rendszer használható (palackon keresztül-Werkzeug),

  • végrehajtja a WSGI szabványt,

  • tatikus fájl routing,

  • kínál greenlets (a gevent) aszinkron kéréskezelő megoldás,

  • Ez lehet létrehozni REST API nélkül külső modulok – támogatja a JSON kliens adatokat.

kis mérete miatt (csak egy fájl) és nincs szükség külső függőségekre (csak Python standard könyvtár), jó választás lehet kezdőknek, akik el akarják kezdeni a webfejlesztés tanulását.
azt is lehet, hogy jó munkát nagyon kis oldalak vagy eldobható tesztek. A BottlePy nem lesz a legjobb választás közepes vagy nagyobb projektekhez, mivel némi munkára lenne szükség ahhoz, hogy eljussunk arra a pontra, ahol a nehezebb keretek kezdődnek.

5,795 GitHub stars / 1,288 StackOverflow kérdések

aszinkron keretek

Aiohttp

Ez egy kiterjedt aszinkron Python keretrendszer. Kínál egy szerver köztes szoftver, jelek, kecses leállások és még sok más:

  • aszinkron kéréskezelés, kliens és szerver websockets,

  • lehetséges a GINO async ORM használata,

  • támogatja a függvény-és osztályalapú nézeteket,

  • elegendő dokumentáció, de egy kicsit nehéz navigálni,

  • lehetséges a tiszta SQLAlchemy használata, de Gino async wrapper ajánlott,

  • támogatja postgres, MySQL, Redis aszinkron illesztőprogramok,

  • nem Out-of-the-box sablon motor, de Jinja2 vagy Mako lehetne alkalmazni,

  • egyéni routing rendszer,

  • nincs WSGI támogatás,

  • támogatja a statikus fájlok útválasztását,

  • sok harmadik féltől származó modul, amelyek tovább bővíthetik a keretet, például az aiohttp-apispec a REST API létrehozásához, az aiohttp-security a felhasználók hitelesítéséhez és engedélyeihez.

mivel számos funkciót kínál a dobozból (pl. kliens és szerver oldal támogatása, websocketek, köztes szoftverek, jelek), az Aiohttp használható közepes méretű projekteknél (vagy akár nagyobbaknál is).

6,378 Github stars / 503 StackOverflow kérdések
Python keretrendszerek összehasonlítása: Django, Pyramid, Flask, Sanic, Tornado, BottlePy és így tovább

Sanic

a Sanic egy nagyon lombikszerű keretrendszer: kicsi, liberális, és sok helyet hagy a fejlesztő számára. Fő meghatározó jellemzője a sebesség.
itt van néhány egyéb jellemzők:

  • támogatja az aszinkron kéréskezelőt,

  • nem kínál adatbázis interfészeket, de a GINO async ORM telepíthető,

  • függvényt és osztályt kínál a nézet kontextusának forrásaként,

  • a kódolási stílus meglehetősen laza, nagyon hasonlít a lombikhoz,

  • a dokumentáció “readthedocs”,

  • Jinja2 html sablon motor használható,

  • egyedi útválasztási rendszer,

  • alapértelmezés szerint nem WSGI-kompatibilis, de egy harmadik féltől származó modul (Sanic-diszpécser) telepíthető annak támogatására,

  • alapvető statikus fájl útválasztás,

  • bővíthető további modulokkal, pl. Sanic CRUD a REST API létrehozásához.

jó döntés lehet A Sanic kiválasztása, Ha már volt némi tapasztalata a Lombikkal kapcsolatban, mivel ennek a két keretrendszernek sok közös vonása van.
Sanic kínál alapértelmezett konfiguráció kezelése, míg aiohttp korábban említett, a felhasználónak meg kell csinálni a saját. Van néhány érdekes harmadik féltől származó modulja, például egy kérési sebességkorlátozó vagy egy GraphQL integráció.

10 625 Github stars / 58 StackOverflow kérdés

Tornado

a Tornado egy Python webes keretrendszer és aszinkron hálózati könyvtár, amelyet eredetileg a FriendFeed (egy közösségi összesítő oldal) fejlesztett ki. Ennek köszönhetően beépített integrációt kínál olyan szociális szolgáltatásokkal, mint a Google, a Facebook és a Twitter.
az integráció más keretrendszerekkel és könyvtárakkal is lehetséges: Twisted, asyncio vagy akár WSGI alkalmazások. Tornado jellemzői:

  • sok általános osztályt kínál, amelyek felhasználhatók az alkalmazás létrehozásához, pl.

  • egyéni HTML sablon motor,

  • tiszta és könnyen olvasható dokumentáció,

  • funkciók és osztályok használhatók a műveletek meghatározására és a kérések kezelésére,

  • egyéni routing kezelés-általános osztályokat kínál, mint amelyeket az útvonal létrehozásához lehet használni,

  • támogatja a WSGI-t, de nem ajánlott – a felhasználónak inkább a Tornado saját interfészeit kell használnia,

  • Out – of-the-box websockets támogatás, hitelesítés (pl. Google-on keresztül), valamint a biztonsági funkciók (mint a cookie-aláírás vagy XSRF védelem),

  • nincs szükség további eszközökre a REST API létrehozásához.

a keretrendszernek jól kell működnie azokban az esetekben, amikor sok bejövő kapcsolat van, amelyek gyorsan kezelhetők vagy valós idejű megoldásokban, például csevegésekben.
Tornado megpróbálja megoldani a c10k problémát, így a nagy feldolgozási sebesség prioritás.
a Tornado másik előnye a szociális szolgáltatások natív támogatása. Ez a keretrendszer nem lesz jó választás szabványos CRUD webhelyek vagy nagy üzleti alkalmazások létrehozásához, mivel nem úgy tervezték, hogy így használják. Nagyobb projektek esetén integrálható a WSGI alkalmazásokkal a nagyobb struktúra részeként, és gondoskodik a nagy kezelési sebességet igénylő feladatokról.

16,768 Github stars / 3,263 StackOverflow kérdések

összefoglaló

a fent bemutatott webes keretrendszerek csupán egy kis darabja a Python keretrendszerek nagyobb és szélesebb családjának.
minden megoldásnak megvannak a maga erős és gyenge pontjai, és mint minden másnál, itt sincs tökéletes párosítás, ami minden feladatot megoldana.
a legfontosabb kérdéseket, amelyeket meg kell válaszolni a keret kiválasztásakor, a megoldandó problémák diktálják.

  • ha széles körű támogatásra van szükség a szerver és a böngésző oldalán, akkor a full-stack keretrendszer jó választás lehet.
  • kisebb projektek esetén, vagy ahol a kódírás rugalmassága prioritás, a mikrokeret lehet az út.
  • azokban az esetekben, amikor a kérés feldolgozási sebessége fontos szerepet játszik, vagy egy projektnek hosszú válaszidőkkel kell megküzdenie, az aszinkron keretrendszernek meg kell tennie a trükköt.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.