Python ramverk kan delas in i några områden som Python är ett mycket varierat språk och kan användas inom olika områden. Var och en av dessa fält har sina egna ramar, varav några är mer populära än andra. Ett av de mest populära fälten Python tillämpas i är webbutveckling, som vi kommer att fokusera på idag.
de presenterade ramarna kan delas upp i tre kategorier: full stack frameworks, som erbjuder många out of the box-funktioner för server-och klientsidan; microframeworks, som erbjuder support på serversidan (ibland kan de utökas till klientsidan) och tillåter att skapa en webbapplikation bara genom att använda en enda Python-fil; och slutligen asynkrona ramar, som hanterar förfrågningar asynkront.
Full-stack webbramar
Django
Django är en av de mest populära Python-ramarna. Det erbjuder en hel del out-of-the-box funktioner som Admin Panel eller generiska vyer och former. Djangos huvudegenskaper är:
-
ett hanteringsskript (”manage.py” ) som kan användas för att utföra de flesta ramspecifika åtgärder (som att starta utvecklingsservern, skapa en administratörsanvändare, samla statiska filer etc.),
-
synkron begäran bearbetning,
-
MTV (model-template-view) arkitektur mönster (som är variation av modell-view-controller mönster),
-
Anpassad objektrelationell kartläggning (ORM) för att kommunicera med databasen,
-
användning av funktioner och klasser för visning sammanhang skapande och åtgärdshantering,
-
Django är strikt och tvingar sin egen kodningsstil på utvecklaren-mycket metaprogrammering,
-
mycket bra, omfattande dokumentation med exempel,
-
anpassade HTML – mallar rendering
-
anpassad URL routing system,
-
överensstämmelse med WSGI standard,
-
stöd för statiska filer – URL routing samt upptäckt och insamling,
-
ett stort antal externa moduler, t.ex. Django REST Framework, Django CMS, Django kanaler (websockets).
Django passar bra för större projekt, där omfattande backend-och frontend-stöd krävs eller i fall där tid spelar en avgörande roll, eftersom Django erbjuder ett stort antal färdiga komponenter. Kodning i Django förlitar sig mest på att anpassa generiska delar av koden. Utvecklaren måste följa en uppsättning regler som följer med givet element. För projekt där mycket kodflexibilitet önskas är Django kanske inte det bästa valet.
37,514 GitHub stjärnor / 183,588 StackOverflow frågor
Web2py
Web2py fokuserar på säkerhet, utvecklingshastighet och användarvänlighet. Det erbjuder en hel del funktioner ur lådan: en webbserver, databas, admin panel, wiki eller grid widgets. Ram huvudegenskaper är:
-
synkron begäran bearbetning,
-
Anpassad databas abstraktionslager (DAL) som fungerar som ORM,
-
tvingar en MVC struktur,
-
funktioner och klasser kan användas för att skapa styrenheter,
-
strikt ”det bör bara finnas ett sätt att göra saker” filosofi,
-
rik dokumentation med många exempel,
-
anpassad HTML – motor som gör att Python-kod kan användas i mallarna,
-
Anpassad routing-url-funktion som genererar interna sökvägar för åtgärder och statiska filer,
-
stöd för WSGI-standarden, men det är möjligt att använda CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) eller annat,
-
erbjuder statisk filrutning och streaming under utveckling,
-
har inbyggda REST-tjänster men kräver Tornado-ramverket för användning av Webbuttag.
Web2py var mycket inspirerad av Ruby on Rails och Django ramverk och tar vad som är bäst från dem båda.
det kan vara ett bra val för programmerare som vill migrera från Ruby eller för de som är uttråkad med Django men letar efter en annan stor och funktionsrik ram.
det erbjuder en” admin ” app, som fungerar som en webbaserad IDE för applikationsutveckling och hantering (t.ex. app skapelser, kod redaktör). Det stöds också av PyCharm. i allmänhet saknar Web2Py inga funktioner som Django har. Dessa två ramar kan användas för att utföra samma uppgifter. Web2Py är yngre, och det har ett mindre samhälle än Django, så det kan vara lite svårare att hitta hjälp vid problem.
1,665 GitHub stjärnor / 2,004 StackOverflow frågor
TurboGears
TurboGears ansluter en hel del externa tjänster för att skapa en funktionell ram:
-
synkron begäran bearbetning,
-
modell-view-controller (MVC) mönster,
-
använder SQLAlchemy ORM,
-
möjliggör användning av funktioner och klass view sammanhang generation,
-
det erbjuder några färdiga för användning generiska klasser (mycket intressant APIController för REST API creation),
-
dokumentation är lite kaotisk men det kan vara fråga om att vänja sig vid det,
-
använder Kajiki-mallspråket,
-
anpassad URL-routing/dispatch-metoder,
-
kompatibel med WSGI standard,
-
stöder statiska filer sökväg konfigurationer
-
kan utökas med ytterligare moduler, t.ex. cirkus och Chaussette för webb uttag stöd.
ramverket är inte lika populärt som det är två föregångare men det är ändå värt att kolla in.
259 GitHub stjärnor / 107 StackOverflow frågor
Microframeworks
kolv
det är en av de mest populära Python microframeworks, det är pålitligt och snabbt. Det sägs att det skapades som ett skämt. De viktigaste egenskaperna hos ramverket är:
-
stöd för synkron begäran,
-
tvingar inte någon projektarkitektur, men har några rekommendationer (paket, modul, ritningar),
-
det erbjuder inte ORM, men SQLAlchemy eller annat kan användas,
-
stöder funktioner såväl som vissa Django-liknande generiska klassvyer (från kolv 0.7),
-
lös kodningsstil, det tvingar inte några lösningar, de flesta beslut lämnas till utvecklarens diskretion,
-
bra dokumentation med exempel,
-
det är möjligt att använda Jinja2 HTML-mallmotor,
-
Werkzeug routing system,
-
kompatibel med WSGI standard,
-
stöder grundläggande statisk fil routing,
-
kan utökas med några ytterligare tredjepartsmoduler, t.ex. flask-restful för REST API skapande eller flask-socketio för Web Sockets stöd.
denna ram kommer att göra susen i små och medelstora projekt. Den har några tredjepartsmoduler som är redo att användas samt bra inbyggda lösningar. kolven ska visa sig i jobb där komplicerade anpassade funktioner krävs men Django verkar för stor för uppgiften. Å andra sidan kan det vara svårt att ställa in Flask för ett större projekt från början eftersom det inte finns något ”officiellt” sätt att göra det.
39,946 GitHub stjärnor / 24,512 StackOverflow frågor
Pyramid
Pyramid börjar med en minimal installation som kan förlängas vid behov. Det är värt att notera att det är en del av Pylons-projektet, som integrerar webbrelaterad teknik.
dessa är några av pyramidens viktigaste egenskaper:
-
erbjuder synkron begäran bearbetning,
-
visningar sammanhang kan definieras med funktioner samt klasser,
-
det finns ingen specifik ORM men SQLAlchemy rekommenderas,
-
inte tvinga någon kodning stil eller projektarkitektur – TIMTOWTDI,
-
erbjuder bra dokumentation med handledning och exempel,
-
ingen specifik HTML-mallmotor levereras men Chameleon rekommenderas,
-
ett intressant anpassat routningssystem tillåter flera vyer att matcha en URL,
-
det är WSGI-kompatibelt,
-
omfattande stöd för statiska filer – filer som betjänar, URL-routing för statiska filer,
-
kan utökas med externa moduler, t.ex. Cornice för REST API: er, aiopyramid med async-stöd.
det här ramverket kan vara ett bra val när du inte vill spendera tid på att lära dig anpassade ramlösningar (som ORM) men fortfarande behöver ett omfattande verktyg för att bygga programvara, eftersom Pyramid stöder användning av många välkända fristående lösningar.
Den har bra skalningsfunktioner-annonserar sig som ett ramverk som kan ”börja små och avsluta stora”.
2,974 github frågor / 2,060 StackOverflow frågor
CherryPy
tillåter skapandet av webbapplikation på samma sätt som objektorienterad Python projekt. Den har inga fullstackfunktioner och tvingar inte några specifika lösningar-utvecklaren kan bestämma hur man löser problem som uppstår under utvecklingen. Cherrypys funktioner är:
-
erbjuder stöd för synkron begäran,
-
tvingar inte någon projektstruktur eller arkitektur,
-
levererar inte någon ORM, men SQLAlchemy eller SQLObject kan användas,
-
levererar inte någon HTML – mallmotor,
-
har en lös kodningsstil,
-
erbjuder anständig dokumentation,
-
routing system routes (Python-version av Rails routing system) kan användas,
-
är kompatibel med WSGI,
-
har bra stöd för statiska filer-möjliggör servering av filer eller hela filer kataloger,
-
gör det möjligt att skapa REST API: er med endast inbyggda verktyg,
-
underlättar användningen av Webbuttag via ws4py-modulen.
den största fördelen med CherryPy är att den levereras med en produktionsklar WSGI-server, vilket tar bort nödvändigheten av att installera en extern server under distribution.
den största nackdelen med detta ramverk är att det inte är mycket populär, därför har ett mindre antal externa moduler och en mindre levande gemenskap.
829 GitHub stjärnor / 1,244 StackOverflow frågor
BottlePy
det är ännu en microframework som annonserar sig så snabbt och enkelt. Det är värt att notera att BottlePy levereras som en enda modul utan ytterligare beroenden. Funktion:
-
implementerar synkron förfrågningshantering,
-
erbjuder anpassad HTML-motor men andra motorer som Mako, Jinja2 eller Cheetah kan användas,
-
levererar inte ORM men det är möjligt att använda externa lösningar, t. ex. SQLAlchemy eller Macaron,
-
tvingar inte någon projektarkitektur,
-
erbjuder tillräcklig dokumentation,
-
har ett anpassat routningssystem men Werkzeug routingsystem kan användas (via bottle-werkzeug),
-
implementerar WSGI – standard,
-
erbjuder grundläggande statisk file routing,
-
erbjuder greenlets (med gevent) som asynkron begäran hantering lösning,
-
det är möjligt att skapa REST API utan externa moduler-stöder JSON klientdata.
På grund av sin lilla storlek (bara en fil) och inga externa beroenden (endast Python-standardbibliotek) krävs kan det vara ett bra val för nybörjare som vill börja lära sig webbutveckling.
det kan också göra ett bra jobb med mycket små platser eller engångstester. BottlePy är inte det bästa valet för medelstora eller större projekt, eftersom det skulle kräva lite arbete för att komma till den punkt där tyngre ramar börjar.
5,795 GitHub stjärnor / 1,288 StackOverflow frågor
asynkrona ramar
Aiohttp
det är en omfattande Async Python ramverk. Det erbjuder en server med middleware, signaler, graciösa avstängningar och många fler:
-
asynkron begäran hantering, klient och server websockets,
-
det är möjligt att använda GINO async ORM,
-
stöder funktion och klassbaserade vyer,
-
tillräcklig dokumentation men lite svårt att navigera,
-
det är möjligt att använda ren SQLAlchemy men GINO som en async wrapper rekommenderas,
-
stöder postgres, MySQL, Redis async drivrutiner,
-
ingen Out-of-the-box mall motor men Jinja2 eller mako kan tillämpas,
-
custom routing system,
-
inget WSGI-stöd,
-
stöder routing för statiska filer,
-
en hel del tredjepartsmoduler som ytterligare kan utöka ramverket, t.ex. aiohttp-apispec för REST API skapande, aiohttp-säkerhet för användare autentiseringar och behörigheter.
eftersom det erbjuder många funktioner ur lådan (t.ex. stöd för klient-och serversidor, websockets, middleware, signaler), kan Aiohttp användas med medelstora projekt (eller till och med med större).
6,378 GitHub stjärnor / 503 StackOverflow frågor
Sanic
Sanic är en mycket kolvliknande ram: den är liten, liberal och lämnar mycket utrymme för utvecklaren. Dess huvudsakliga definierande funktion är dess hastighet.
här är några andra egenskaper:
-
stöd för async request handler,
-
erbjuder inga databasgränssnitt men GINO async ORM kan installeras,
-
erbjuder funktion och klass som källa till kontext,
-
kodningsstil är ganska lös, mycket lik Flask,
-
dokumentation levererad med ”readthedocs”,
-
Jinja2 HTML mall motor kan användas,
-
skräddarsydda routing system,
-
är inte WSGI kompatibel som standard, men en tredje part modul (sanic-Dispatcher) kan installeras för att stödja det,
-
har grundläggande statisk fil routing,
-
kan utökas med ytterligare moduler, t.ex. Sanic CRUD för REST API skapande.
det borde vara ett bra beslut att välja Sanic när du redan har erfarenhet av Flask, eftersom dessa två ramar har mycket gemensamt. Sanic erbjuder standardkonfigurationshantering, medan i aiohttp som nämnts tidigare måste användaren göra det på egen hand. Den har några intressanta tredjepartsmoduler som en begäran om hastighetsbegränsare eller en GraphQL-integration.
10,625 Github stars / 58 StackOverflow frågor
Tornado
Tornado är en Python webbramverk och asynkron nätverk bibliotek, som ursprungligen utvecklades på FriendFeed (en social aggregering webbplats). Tack vare det erbjuder den en inbyggd integration med sociala tjänster som Google, Facebook och Twitter. integrationen med andra ramverk och bibliotek är också möjlig: Twisted, asyncio eller till och med WSGI-applikationer. Tornado funktioner:
-
erbjuder en hel del generiska klasser som kan användas för att skapa programmet, t. ex. För websockets,
-
anpassad HTML-mallmotor,
-
tydlig och lättläst dokumentation,
-
funktioner och klasser kan användas för att definiera åtgärder och hantera förfrågningar,
-
Anpassad routinghantering-erbjuder generiska klasser än vad som kan användas för att skapa rutter,
-
det stöder WSGI, men det rekommenderas inte – användaren bör använda tornado egna gränssnitt istället,
-
out – of-the-box websockets stöd, autentisering (t. ex. säkerhetsfunktioner (som cookie-signering eller xsrf-skydd),
-
inga ytterligare verktyg behövs för att skapa REST API.
ramverket ska fungera bra i fall där det finns många inkommande anslutningar som kan hanteras snabbt eller i realtidslösningar, t.ex. chattar.
Tornado försöker lösa c10k problemet så hög processorhastighet är en prioritet.
En annan fördel med Tornado är dess infödda stöd för sociala tjänster. Detta ramverk kommer inte att vara ett bra val för att skapa vanliga CRUD-webbplatser eller stora affärsapplikationer, eftersom det inte var utformat för att användas på det sättet. För större projekt kan den integreras med WSGI-applikationer som en del av deras större struktur och ta hand om uppgifter som kräver höga hanteringshastigheter.
16,768 GitHub stars / 3,263 StackOverflow frågor
sammanfattning
webbramarna som presenteras ovan är bara en liten bit av en större och bredare familj av Python-ramar.
varje lösning har sina starka och svaga punkter och, som med allt annat, det finns ingen perfekt match som kommer att lösa varje given uppgift.
de viktigaste frågorna som man måste svara på när man väljer ramverket dikteras av problem som måste lösas.
- Om omfattande stöd på server-och webbläsarsidan krävs, kan en full-stack-RAM vara ett bra val.
- för mindre projekt eller där flexibiliteten i att skriva kod är en prioritet kan ett mikroramverk vara vägen att gå.
- i de fall där begäran bearbetningshastighet spelar en viktig roll eller ett projekt kommer att behöva ta itu med långa svarstider, asynkron ram bör göra susen.