Python’ s Frameworks Comparison: Django, Pyramid, Flask, Sanic, Tornado, BottlePy and More

Python frameworks voidaan jakaa muutamaan alueeseen, sillä Python on hyvin monimuotoinen kieli ja sitä voidaan käyttää eri aloilla. Jokaisella näistä kentistä on omat kehyksensä, joista jotkut ovat suositumpia kuin toiset. Yksi suosituimmista kentistä, joissa Pythonia käytetään, on web-kehitys, johon keskitymme tänään.

esitetyt puitteet voidaan jakaa kolmeen luokkaan: full stack frameworks, jotka tarjoavat paljon Out of the box-ominaisuuksia palvelimelle ja asiakaspuolelle; microframeworks, jotka tarjoavat palvelinpuolen tuen (joskus ne voidaan laajentaa asiakaspuolelle) ja mahdollistavat web-sovelluksen luomisen vain käyttämällä yhtä Python-tiedostoa; ja lopuksi asynkroniset frameworks, jotka käsittelevät pyyntöjä asynkronisesti.

Full-stack web frameworks

Django

Django on yksi suosituimmista Python-kehyksistä. Se tarjoaa paljon out-of-the-box toimintoja, kuten Admin paneeli tai yleisiä näkymiä ja lomakkeita. Djangon pääpiirteet ovat:

  • yksi hallintakirjoitus (”manage.py”), jota voidaan käyttää useimpien kehyskohtaisten toimien suorittamiseen (kuten kehityspalvelimen käynnistäminen, pääkäyttäjän luominen, staattisten tiedostojen kerääminen jne.),

  • synchronous request processing,

    MTV (model-template-view) arkkitehtuurikuvio (joka on Model-view-controller patternin muunnelma),

    custom object-relational mapping (ORM) tietokannan kanssa kommunikointiin,

    funktioiden ja luokkien käyttö näkymän kontekstin luomiseen ja toiminnan käsittelyyn,

  • Django on tiukka ja pakottaa kehittäjään Oman koodaustyylinsä – paljon metaohjelmointia,

  • erittäin hyvä, laaja dokumentaatio esimerkein,

  • mukautettuja HTML-mallipohjia renderöinti Moottori,

  • custom URL routing system,

  • WSGI – standardin noudattaminen,

  • staattisten tiedostojen tuki-URL-reititys sekä tunnistus-ja keruu,

  • suuri määrä ulkoisia moduuleja, kuten Django REST Framework, Django CMS, Django-kanavat (WebSocketit).

Django sopii hyvin isompiin projekteihin, joissa tarvitaan laajaa taustaosa-ja frontend-tukea tai tapauksissa, joissa aika on ratkaisevassa roolissa, sillä Django tarjoaa suuren määrän valmiita komponentteja. Koodaus Djangossa perustuu enimmäkseen koodin yleisten osien muokkaamiseen. Kehittäjän on noudatettava sääntöjä, jotka tulevat tietyn elementin kanssa. Projekteihin, joissa halutaan paljon koodin joustavuutta, Django ei välttämättä ole paras valinta.

37,514 Github stars / 183,588 StackOverflow questions
5-Sep-30-2020-01-29-47-33-PM

Web2py

Web2py keskittyy tietoturvaan, kehitysnopeuteen ja helppokäyttöisyyteen. Se tarjoaa paljon ominaisuuksia kättelyssä: web-palvelin, tietokanta, admin paneeli, wiki tai grid widgetit. Kehyksen tärkeimmät ominaisuudet ovat:

    synchronous request processing,

    custom Database Abstraction Layer (dal), joka toimii ORM: nä,

    pakottaa MVC – rakenteen,

    funktioita ja luokkia voidaan käyttää säätimien luomiseen,

  • tiukka ”There should be only one way of doing things” – filosofia,

  • runsas dokumentaatio, jossa on paljon esimerkkejä,

  • mukautettu HTML-moottori, joka mahdollistaa Python-koodin käytön malleissa,

    custom routing-url-funktio, joka luo sisäisiä polkuja toiminnoille ja staattisille tiedostoille,

  • tuki WSGI-standardille, mutta on mahdollista käyttää CGI: tä (Common Gateway Interface), FastCGI: tä, Gae: tä (Google App Engine) tai muuta,

  • tarjoaa staattisen tiedostojen reitityksen ja suoratoiston kehityksen aikana,

  • on sisäänrakennettu REST-palvelu, mutta vaatii Tornado-kehyksen verkkopistokkeen käyttöön.

Web2py on saanut paljon vaikutteita Ruby On Rails-ja Django frameworks-yhtyeistä ja ottaa kummastakin mitä parasta.
se voi olla hyvä valinta ohjelmoijille, jotka haluavat siirtyä Rubysta, tai niille, jotka ovat kyllästyneet Djangoon, mutta etsivät toista suurta ja monipuolista kehystä.
Se tarjoaa” admin ” -sovelluksen, joka toimii web-pohjaisena IDE: nä sovelluskehitystä ja hallintaa varten (esim.sovellusluomukset, koodieditori). Sitä tukee myös PyCharm.
yleisesti ottaen Web2Py: ltä ei puutu Djangon ominaisuuksia. Näitä kahta kehystä voidaan käyttää samojen tehtävien suorittamiseen. Web2Py on nuorempi ja sillä on pienempi yhteisö kuin Djangolla, joten avun löytäminen ongelmatilanteissa voi olla hieman vaikeampaa.

1 665 GitHub stars / 2 004 StackOverflow questions
0Python ' s Frameworks Comparison: Django, Pyramid, Flask, Sanic, Tornado, BottlePy and More

TurboGears

TurboGears connect a lot of external services to create one functional framework:

    synkroninen pyyntöjen käsittely,

    model-view-controller (MVC)-kuvio,

  • käyttää sqlalchemy ORMIA,

  • mahdollistaa funktioiden käytön ja luokkanäkymän kontekstin generoinnin,

  • Se tarjoaa joitakin käyttövalmiita yleisluokkia (erittäin mielenkiintoinen Apikontrolleri levolle API creation),

  • dokumentaatio on hieman kaoottista, mutta siihen saattaa olla totuttelemista,

    käyttää Kajiki-mallikieltä,

    custom URL routing/Dispatch methods,

  • yhteensopiva wsgi: n kanssa standard,

  • tukee staattisten tiedostojen polkukonfiguraatioita

  • voidaan laajentaa lisämoduuleilla, kuten Circus ja Chaussette Verkkopistokkeiden tueksi.

kehys ei ole yhtä suosittu kuin sen kaksi edeltäjää, mutta siitä huolimatta se kannattaa tsekata.

259 GitHub stars / 107 StackOverflow questions
Pythonin kehysten Vertailu: Django, Pyramid, Flask, Sanic, Tornado, BottlePy and More

Mikroframeworks

Flask

se on yksi suosituimmista Python mikroframeworks, se on luotettava ja nopea. Sen kerrotaan syntyneen vitsinä. Kehyksen tärkeimmät ominaisuudet ovat:

    synchronous request support,

  • ei pakota mitään projektiarkkitehtuuria, mutta sillä on joitakin suosituksia (paketti, moduuli, piirustukset),

  • se ei tarjoa ORM: ää, mutta Sqlalchemyä tai muuta voidaan käyttää,

  • tukee funktioita sekä joitakin Djangon kaltaisia yleisiä luokkanäkymiä (alkaen pullosta 0.7),

  • löyhä koodaustyyli, se ei pakota mitään ratkaisuja, suurin osa päätöksistä jää kehittäjän harkinnan varaan,

    hyvä dokumentaatio esimerkein,

    on mahdollista käyttää Jinja2 HTML-Mallimoottoria,

    Werkzeug-reititysjärjestelmää,

  • WSGI: n mukainen standard,

  • tukee staattisen tiedoston perusreititystä,

  • voidaan laajentaa joillakin ylimääräisillä kolmannen osapuolen moduuleilla, esim.flask-restful for rest API creation tai flask-socketio for Web Sockets support.

Tämä kehys tekee tepposet pienissä ja keskisuurissa hankkeissa. Se on joitakin kolmannen osapuolen moduulit, jotka ovat valmiita käytettäväksi sekä hyviä native ratkaisuja.
Taskumatin pitäisi todistaa itsensä töissä, joissa vaaditaan monimutkaisia mukautettuja ominaisuuksia, mutta Django tuntuu liian suurelta tehtävään. Toisaalta Taskumatin asettaminen isompaan projektiin alusta alkaen voi olla hankalaa, sillä siihen ei ole ”virallista” tapaa.

39,946 Github stars / 24,512 StackOverflow questions
Pythonin kehysten Vertailu: Django, Pyramid, Flask, Sanic, Tornado, BottlePy and More

pyramidi

pyramidi alkaa minimaalisella asennuksella, jota voidaan tarvittaessa laajentaa. On syytä huomata, että se on osa Pylons-projektia, jossa integroidaan verkkoon liittyviä teknologioita.
nämä ovat pyramidin tärkeimpiä ominaisuuksia:

    tarjoaa synkronista pyyntöjen käsittelyä,

  • näkemyksiä Konteksteja voidaan määritellä funktioilla sekä luokilla,

  • ei ole mitään erityistä ORM: ää, mutta SQLAlchemy on suositeltava,

  • ei pakota mihinkään koodaustyyliin tai projektiarkkitehtuuriin – TIMTOWTDI,

  • tarjoaa hyvää dokumentointia tutoriaaleineen ja esimerkeineen

  • mitään tiettyä HTML-mallimoottoria ei toimiteta, mutta suositellaan kameleonttia,

    mielenkiintoinen custom routing system mahdollistaa useiden näkymien sovittamisen yhteen URL-osoitteeseen,

    Se on wsgi-yhteensopiva,

  • laajat staattiset tiedostot tukevat-tiedostot palvelevat, staattisten tiedostojen URL-reititys,

  • voidaan laajentaa ulkoisilla moduuleilla, esim.Rest-Sovellusliittymillä, aiopyramidilla async-tuella.

Tämä kehys voi olla hyvä valinta silloin, kun et halua käyttää aikaa mukautettujen kehysratkaisujen (kuten ORM) oppimiseen, mutta tarvitset silti laajan työkalun ohjelmistojen rakentamiseen, sillä Pyramid tukee monien tunnettujen erillisratkaisujen käyttöä.
sillä on hyvät skaalausominaisuudet – mainostaa itseään kehyksenä, joka voi ”aloittaa pienestä ja lopettaa isosti”.

2 974 GitHub questions/2 060 StackOverflow questions
Python ' s Frameworks Comparison: Django, Pyramid, Flask, Sanic, Tornado, BottlePy and More

CherryPy

mahdollistaa verkkosovelluksen luomisen samalla tavalla kuin oliopainotteinen Python-projekti. Siinä ei ole full-stack – toimintoja eikä se pakota mitään erityisiä ratkaisuja-kehittäjä voi päättää, miten ratkaista kehityksen aikana ilmeneviä ongelmia. Cherrypyn piirteitä ovat:

    tarjoaa synkronista pyyntötukea,

    ei pakota mitään projektirakennetta tai arkkitehtuuria,

    ei toimita mitään ORM: ää, mutta sqlalchemy tai SQLObject voidaan käyttää,

    ei toimita mitään HTML – mallimoottoria,

    on löyhä koodaustyyli,

  • tarjoaa kunnollisen dokumentaation,

  • reititysjärjestelmän reitit (Python-versio rails-reititysjärjestelmästä) voidaan käyttää,

    on WSGI: n mukainen,

  • on hyvä tuki staattisille tiedostoille-mahdollistaa tiedostojen tai kokonaisten tiedostojen tarjoamisen hakemistot,

  • mahdollistaa LEPORAJAPINTOJEN luomisen vain sisäänrakennetuilla työkaluilla,

  • helpottaa Verkkopistokkeiden käyttöä ws4py-moduulin kautta.

Cherrypyn tärkein etu on se, että sen mukana tulee tuotantovalmis WSGI-palvelin, mikä poistaa tarpeen perustaa ulkoinen palvelin käyttöönoton aikana.
tämän kehyksen suurin haittapuoli on se, että se ei ole kovin suosittu, joten sillä on pienempi määrä ulkoisia moduuleja ja vähemmän elinvoimainen yhteisö.

829 GitHub stars/1,244 StackOverflow questions
Python ' s Frameworks Comparison: Django, Pyramid, Flask, Sanic, Tornado, BottlePy and More

BottlePy

se on jälleen yksi mikrokehys, joka mainostaa itseään nopeana ja yksinkertaisena. On syytä huomata, että BottlePy toimitetaan yhtenä moduulina ilman ylimääräisiä riippuvuuksia. Ominaisuus:

    toteuttaa synkronisen pyyntöjen käsittelyn,

  • tarjoaa mukautetun HTML-Moottorin, mutta muita moottoreita kuten Mako, Jinja2 tai Cheetah voidaan käyttää,

  • ei toimita ORM: ää, mutta on mahdollista käyttää ulkoisia ratkaisuja, esim. SQLAlchemy tai Macaron,

    ei pakota mihinkään projektiarkkitehtuuriin,

  • tarjoaa riittävästi dokumentaatiota,

  • on mukautettu Reititysjärjestelmä, mutta werkzeugin Reititysjärjestelmä voidaan käyttää (pullo-werkzeugin kautta),

    toteuttaa WSGI – standardin,

    tarjoaa perustason staattisen tiedostojen reititys,

  • tarjoaa greenletit (geventillä) asynkronisena pyyntöjen käsittelyratkaisuna,

  • on mahdollista luoda REST API ilman ulkoisia moduuleja-tukee JSON-asiakastietoja.

pienen kokonsa (vain yksi tiedosto) ja ulkoisten riippuvuuksien (vain Python-standardikirjasto) vuoksi se voi olla hyvä valinta aloittelijoille, jotka haluavat aloittaa verkkokehityksen opiskelun.
se saattaa pärjätä hyvin myös hyvin pienillä sivustoilla tai kertakäyttötesteillä. BottlePy ei ole paras vaihtoehto keskisuurille tai isommille hankkeille, sillä raskaampien puitteiden alkuun pääseminen vaatisi jonkin verran työtä.

5 795 GitHub stars/1 288 StackOverflow questions

Asynchronous frameworks

It ’ s a extensive async Python framework. Se tarjoaa palvelimen väliohjelmisto, signaalit, siro sammutukset ja paljon muuta:

    asynkroninen pyyntöjen käsittely, asiakas-ja palvelinsivustot,

  • on mahdollista käyttää GINO async ORMIA,

  • tukee funktio-ja luokkakohtaisia näkymiä,

  • riittävä dokumentaatio mutta hieman vaikeasti navigoitava,

  • on mahdollista käyttää puhdasta Sqlalchemyä, mutta async-kääreenä suositellaan ginoa,

  • tukee postgres -, MySQL -, redis Async-ajureita,

    ei ulkopuolista mallimoottoria, mutta jinja2-tai Mako-mallia voidaan käyttää,

    Custom routing system,

    ei wsgi-tukea,

  • tukee staattisten tiedostojen reititystä,

  • paljon kolmannen osapuolen moduuleja, jotka voivat edelleen laajentaa kehystä, kuten aiohttp-apispec for REST API creation, aiohttp-security for users authentications and luvat.

Koska se tarjoaa paljon ominaisuuksia kättelyssä (esim. tuki asiakkaan ja palvelimen puolella, websockets, middleware, signaalit), Aiohttp voidaan käyttää keskisuurten hankkeiden (tai vaikka isompiakin).

6 378 Github stars / 503 StackOverflow questions
Pythonin kehysten Vertailu: Django, Pyramid, Flask, Sanic, Tornado, BottlePy ja muut

Sanic

Sanic on hyvin pullomainen kehys: se on pieni, liberaali ja jättää paljon tilaa kehittäjälle. Sen tärkein ominaisuus on sen nopeus.
tässä on joitakin muita ominaisuuksia:

    tuki async-pyyntöjen käsittelijälle,

  • ei tarjoa mitään tietokantaliittymiä, mutta Gino async ORM voidaan asentaa,

  • tarjoaa funktion ja luokan katseluyhteyden lähteeksi,

    koodaustyyli on melko Väljä, hyvin samankaltainen kuin taskumatti,

  • dokumentaatio toimitetaan ”readthedocs”,

  • jinja2 HTML template engine can be used,

  • custom made routing system,

  • ei ole WSGI-yhteensopiva oletuksena, mutta sen tueksi voidaan asentaa kolmannen osapuolen moduuli (sanic-Dispatcher),

    on perus staattisen tiedoston reititystä,

  • voidaan laajentaa lisämoduuleilla, esim.Sanic CRUD for REST API creation.

kannattanee valita Sanic, kun on jo jonkin verran kokemusta pullosta, sillä näillä kahdella kehyksellä on paljon yhteistä.
Sanic tarjoaa oletusasetuksilla käsittely, kun taas aiohttp edellä mainittiin, käyttäjä on tehdä se omasta. Siinä on mielenkiintoisia kolmannen osapuolen moduuleja, kuten pyyntönopeuden rajoitin tai GraphQL-integraatio.

10 625 Github stars/58 StackOverflow questions

Tornado

Tornado on Python-verkkokehys ja asynkroninen verkostokirjasto, joka on alun perin kehitetty friendfeedissä (sosiaalisen aggregoinnin sivusto). Sen ansiosta se tarjoaa sisäänrakennetun integraation sosiaalipalveluihin, kuten Googleen, Facebookiin ja Twitteriin.
integrointi muihin kehyksiin ja kirjastoihin on myös mahdollista: Twisted, asyncio tai jopa WSGI-Sovellukset. Tornadon ominaisuudet:

  • tarjoaa paljon geneerisiä luokkia, joita voidaan käyttää sovelluksen luomiseen, esim. Router, tai SocketHandler for websockets,

  • custom HTML template engine,

  • selkeä ja helppolukuinen dokumentaatio,

  • toimintoja ja luokkia voidaan käyttää toimien määrittelyyn ja pyyntöjen käsittelyyn,

  • custom routing handling-tarjoaa yleisiä luokkia kuin voidaan käyttää reitin luomiseen,

  • tukee wsgi: tä, mutta sitä ei suositella-käyttäjän tulisi käyttää sen sijaan tornadon omia rajapintoja,
  • Out – of – the-box websockets-tuki, autentikointi (esim. Googlen kautta), ja turvaominaisuudet (kuten evästeen allekirjoittaminen tai XSRF-suojaus),

  • REST API: n luomiseen ei tarvita lisätyökaluja.

kehyksen pitäisi toimia hyvin tapauksissa, joissa on paljon saapuvia yhteyksiä, jotka voidaan hoitaa nopeasti tai reaaliaikaisissa ratkaisuissa, kuten chateissa.
Tornado yrittää ratkaista c10k-ongelman, joten suuri prosessointinopeus on etusijalla.
toinen tornadon etu on sen kotoperäinen tuki sosiaalipalveluille. Tämä kehys ei ole hyvä valinta tavallisten CRUD-sivustojen tai suuryritysten sovellusten luomiseen, koska sitä ei ole suunniteltu käytettäväksi tällä tavalla. Isommissa projekteissa se voidaan integroida WSGI-sovelluksiin osana niiden suurempaa rakennetta ja hoitaa suuria käsittelynopeuksia vaativia tehtäviä.

16,768 Github stars/3,263 StackOverflow questions

Summary

yllä esitetyt web frameworksit ovat vain pieni kimpale suuremmasta ja laajemmasta Python frameworks-ryhmästä.
jokaisella ratkaisulla on vahvat ja heikot puolensa, eikä, kuten kaikessa muussakaan, ole olemassa täydellistä vastusta, joka ratkaisisi jokaisen tehtävän.
tärkeimmät kysymykset, joihin kehystä valitessa on vastattava, sanelevat ongelmat, jotka on ratkaistava.

  • Jos tarvitaan laajaa tukea palvelin-ja selainpuolella, niin täyspinokehys voisi olla hyvä valinta.
  • pienemmissä hankkeissa tai jos koodin kirjoittamisen joustavuus on etusijalla, voidaan käyttää mikrokehystä.
  • tapauksissa, joissa pyynnön käsittelynopeudella on tärkeä merkitys tai projekti joutuu käsittelemään pitkiä vasteaikoja, asynkronisen kehyksen pitäisi toimia.

Vastaa

Sähköpostiosoitettasi ei julkaista.