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.),
-
Django on tiukka ja pakottaa kehittäjään Oman koodaustyylinsä – paljon metaohjelmointia,
-
mukautettuja HTML-mallipohjia renderöinti Moottori,
-
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).
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,
erittäin hyvä, laaja dokumentaatio esimerkein,
custom URL routing system,
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
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:
-
tiukka ”There should be only one way of doing things” – filosofia,
-
runsas dokumentaatio, jossa on paljon esimerkkejä,
-
tuki WSGI-standardille, mutta on mahdollista käyttää CGI: tä (Common Gateway Interface), FastCGI: tä, Gae: tä (Google App Engine) tai muuta,
-
on sisäänrakennettu REST-palvelu, mutta vaatii Tornado-kehyksen verkkopistokkeen käyttöön.
synchronous request processing,
custom Database Abstraction Layer (dal), joka toimii ORM: nä,
pakottaa MVC – rakenteen,
funktioita ja luokkia voidaan käyttää säätimien luomiseen,
mukautettu HTML-moottori, joka mahdollistaa Python-koodin käytön malleissa,
custom routing-url-funktio, joka luo sisäisiä polkuja toiminnoille ja staattisille tiedostoille,
tarjoaa staattisen tiedostojen reitityksen ja suoratoiston kehityksen aikana,
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
TurboGears
TurboGears connect a lot of external services to create one functional framework:
-
käyttää sqlalchemy ORMIA,
-
Se tarjoaa joitakin käyttövalmiita yleisluokkia (erittäin mielenkiintoinen Apikontrolleri levolle API creation),
-
yhteensopiva wsgi: n kanssa standard,
-
tukee staattisten tiedostojen polkukonfiguraatioita
-
voidaan laajentaa lisämoduuleilla, kuten Circus ja Chaussette Verkkopistokkeiden tueksi.
synkroninen pyyntöjen käsittely,
model-view-controller (MVC)-kuvio,
mahdollistaa funktioiden käytön ja luokkanäkymän kontekstin generoinnin,
dokumentaatio on hieman kaoottista, mutta siihen saattaa olla totuttelemista,
käyttää Kajiki-mallikieltä,
custom URL routing/Dispatch methods,
kehys ei ole yhtä suosittu kuin sen kaksi edeltäjää, mutta siitä huolimatta se kannattaa tsekata.
259 GitHub stars / 107 StackOverflow questions
Mikroframeworks
Flask
se on yksi suosituimmista Python mikroframeworks, se on luotettava ja nopea. Sen kerrotaan syntyneen vitsinä. Kehyksen tärkeimmät ominaisuudet ovat:
-
ei pakota mitään projektiarkkitehtuuria, mutta sillä on joitakin suosituksia (paketti, moduuli, piirustukset),
-
tukee funktioita sekä joitakin Djangon kaltaisia yleisiä luokkanäkymiä (alkaen pullosta 0.7),
-
WSGI: n mukainen standard,
-
voidaan laajentaa joillakin ylimääräisillä kolmannen osapuolen moduuleilla, esim.flask-restful for rest API creation tai flask-socketio for Web Sockets support.
synchronous request support,
se ei tarjoa ORM: ää, mutta Sqlalchemyä tai muuta voidaan käyttää,
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ää,
tukee staattisen tiedoston perusreititystä,
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
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:
-
näkemyksiä Konteksteja voidaan määritellä funktioilla sekä luokilla,
-
ei ole mitään erityistä ORM: ää, mutta SQLAlchemy on suositeltava,
-
tarjoaa hyvää dokumentointia tutoriaaleineen ja esimerkeineen
-
laajat staattiset tiedostot tukevat-tiedostot palvelevat, staattisten tiedostojen URL-reititys,
-
voidaan laajentaa ulkoisilla moduuleilla, esim.Rest-Sovellusliittymillä, aiopyramidilla async-tuella.
tarjoaa synkronista pyyntöjen käsittelyä,
ei pakota mihinkään koodaustyyliin tai projektiarkkitehtuuriin – TIMTOWTDI,
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,
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
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 kunnollisen dokumentaation,
-
on hyvä tuki staattisille tiedostoille-mahdollistaa tiedostojen tai kokonaisten tiedostojen tarjoamisen hakemistot,
-
mahdollistaa LEPORAJAPINTOJEN luomisen vain sisäänrakennetuilla työkaluilla,
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,
reititysjärjestelmän reitit (Python-versio rails-reititysjärjestelmästä) voidaan käyttää,
on WSGI: n mukainen,
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
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:
-
tarjoaa mukautetun HTML-Moottorin, mutta muita moottoreita kuten Mako, Jinja2 tai Cheetah voidaan käyttää,
-
tarjoaa riittävästi dokumentaatiota,
-
tarjoaa greenletit (geventillä) asynkronisena pyyntöjen käsittelyratkaisuna,
-
on mahdollista luoda REST API ilman ulkoisia moduuleja-tukee JSON-asiakastietoja.
toteuttaa synkronisen pyyntöjen käsittelyn,
ei toimita ORM: ää, mutta on mahdollista käyttää ulkoisia ratkaisuja, esim. SQLAlchemy tai Macaron,
ei pakota mihinkään projektiarkkitehtuuriin,
on mukautettu Reititysjärjestelmä, mutta werkzeugin Reititysjärjestelmä voidaan käyttää (pullo-werkzeugin kautta),
toteuttaa WSGI – standardin,
tarjoaa perustason staattisen tiedostojen reititys,
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:
-
on mahdollista käyttää GINO async ORMIA,
-
tukee funktio-ja luokkakohtaisia näkymiä,
-
on mahdollista käyttää puhdasta Sqlalchemyä, mutta async-kääreenä suositellaan ginoa,
-
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.
asynkroninen pyyntöjen käsittely, asiakas-ja palvelinsivustot,
riittävä dokumentaatio mutta hieman vaikeasti navigoitava,
tukee postgres -, MySQL -, redis Async-ajureita,
ei ulkopuolista mallimoottoria, mutta jinja2-tai Mako-mallia voidaan käyttää,
Custom routing system,
ei wsgi-tukea,
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
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:
-
ei tarjoa mitään tietokantaliittymiä, mutta Gino async ORM voidaan asentaa,
-
dokumentaatio toimitetaan ”readthedocs”,
-
custom made routing system,
-
voidaan laajentaa lisämoduuleilla, esim.Sanic CRUD for REST API creation.
tuki async-pyyntöjen käsittelijälle,
tarjoaa funktion ja luokan katseluyhteyden lähteeksi,
koodaustyyli on melko Väljä, hyvin samankaltainen kuin taskumatti,
jinja2 HTML template engine can be used,
ei ole WSGI-yhteensopiva oletuksena, mutta sen tueksi voidaan asentaa kolmannen osapuolen moduuli (sanic-Dispatcher),
on perus staattisen tiedoston reititystä,
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,
-
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.
toimintoja ja luokkia voidaan käyttää toimien määrittelyyn ja pyyntöjen käsittelyyn,
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.