Python kan vara både ett underhållande verktyg och ett kraftfullt instrument. Samma sak kan sägas om möjligheterna som språket erbjuder.
Python är populärt bland både hobbyutövare, forskare och systemarkitekter.
Det är extremt enkelt att komma igång med Python, som erbjuder avancerade abstraktioner och metaprogrammeringsmöjligheter för att utveckla stora och komplexa system. Dessutom finns det ett stort antal bibliotek för att utföra nästan alla typer av uppgifter. Det finns visserligen begränsningar i fråga om samtidighet och stark typning, men dessa kan man arbeta runt.
I den här artikeln ska vi granska några av de mest användbara Python-ramverken för att skapa webbapplikationer, både små och stora.
Django
Django-ramverket har behållit sin position som det mest populära valet för Python-utvecklare under en lång tid. Om du överraskade en Python-utvecklare mitt i natten och tvingade dem att skapa en webbapplikation under pistolhot, skulle de sannolikt instinktivt välja Django, precis som en Ruby-utvecklare skulle välja Rails.
Och det finns goda skäl till detta. Django är, som slagordet säger, ”ett webbramverk för perfektionister med deadlines”. Det är ett så kallat ramverk med ”batterier inkluderade” (ungefär som Python själv), vilket innebär att det erbjuder alla grundläggande funktioner direkt från start.
Med dessa inbyggda funktioner minskar Django utvecklingstiden betydligt:
- En praktisk och välutvecklad ORM (Object-Relational Mapper), med automatiska migreringar som skapas och tillämpas av ramverket.
- Möjlighet att automatiskt generera en administratörspanel baserat på dina datamodeller.
- Stöd för cookies, sessioner, middleware, mallar, med mera.
- Säkerhetsfunktioner som skydd mot XSS och CSRF, implementeras automatiskt.
- Fungerar med i princip alla databaser (adaptrar är lätta att hitta även där det saknas officiellt stöd).
- Utmärkt stöd för geografiska data och rumsliga frågor genom GeoDjango.
Och mycket, mycket mer. Kort sagt, Django är ett komplett och användarvänligt webbramverk.
Är Django rätt för dig?
Absolut.
Django passar bra för alla typer av projekt, oavsett om det handlar om en snabb prototyp eller en företagsapplikation. Den enda potentiella nackdelen är ramverkets struktur. Eftersom Django är utformat för att göra utvecklingen snabb och smidig, tvingar det utvecklaren att följa sin egen struktur (ett koncept som kallas ”konvention före konfiguration”), vilket du kanske inte håller med om. Om du till exempel vill ersätta Django ORM med något annat, som SQL Alchemy, kan det leda till oväntade komplikationer.
Är du intresserad av att bli fullstackutvecklare med Django och Python? Kolla in denna fantastiska onlinekurs.
Flask
Trots att Django dominerar i Python-baserad webbutveckling, är Flask en stark konkurrent.
Till skillnad från Django är Flask ett ”mikro-ramverk”, vilket innebär att det fokuserar på att göra ett fåtal grundläggande saker väl och lämnar resten till dig. Detta kan vara både en källa till frustration och glädje, beroende på dina mål. För utvecklare som vet vad de gör och som vill anpassa sina webbapplikationer genom att välja sina egna komponenter, är Flask en idealisk lösning.
Flask erbjuder följande funktioner:
- Routing, mallhantering, sessionshantering och andra användbara funktioner.
- Fullt stöd för enhetstester.
- En minimalistisk och anpassningsbar arkitektur.
- Utmärkt REST-stöd.
- Stöd för Blueprints, Flasks unika tillvägagångssätt för arkitektur i mindre webbapplikationer.
- Möjlighet att välja egna paket för ORM, migrering, etc.
- Flexibel applikationsstruktur – placera dina filer där det är mest logiskt för dig.
- Statiskt filhantering.
- WGSI-kompatibel.
Är Flask rätt för dig?
Som tidigare nämnts är Flask ett minimalistiskt webbramverk där allt är uppdelat i separata komponenter som kan bytas ut. Om du snabbt behöver bygga en prototyp kommer du att behöva lägga ner mycket tid på att fatta små beslut om databas, mappstruktur, routing etc., vilket kan vara kontraproduktivt. Flask är mest lämpligt för stabila och seriösa projekt av medelstor till stor storlek, särskilt REST API:er.
Bottle
Om du anser att Flask är lite för omfattande och vill ha ännu mer kontroll, är det dags att bekanta sig med Bottle.
Bottle är ännu mer minimalistiskt än Flask, med Python standardbibliotek som enda beroende. Det betyder att du inte behöver installera något med pip, även om du förmodligen kommer att behöva det snart ändå. Här är varför Bottle sticker ut för vissa utvecklare:
- Distribution med en enda fil. Hela din applikation finns i en enda ”.py”-fil.
- Inga externa beroenden. Om du har rätt Python-version installerad, är du redo att köra.
- Erbjuder en egen mallmotor, som kan bytas ut mot Jinja2, Mako eller Cheetah.
- Stöd för formulär, rubriker, cookies och filuppladdning.
- Inbyggd webbserver, som enkelt kan bytas ut.
Är Bottle rätt för dig?
Om du utvecklar en mycket liten applikation (mindre än 500 rader kod) utan särskilda krav kan Bottle vara ett bra alternativ. Det är ett rakt och okomplicerat tillvägagångssätt för att skapa webbapplikationer. Men i praktiken kommer du förmodligen upptäcka att Bottle hindrar dig mer än hjälper dig. I verkligheten kommer kraven alltid att ändras och nya funktioner kommer att behövas. Då blir det ett problem att hantera allt i en enda fil.
Om du dessutom tycker att Bottle och Flask verkar likartade, har du rätt. Det har funnits förslag på att slå ihop de två sedan 2012, och även Armin, skaparen av Flask, håller med om det. Marcel, skaparen av Bottle, insisterar dock på en strikt ideologisk skillnad på grund av sitt fokus på en enda fil och att de två ska förbli separata.
Zope
Zope är svårt att förklara i korthet, men jag ska göra ett försök. Det är visserligen ett webbramverk som kan användas för att bygga stora och små applikationer, men det är inte allt. Zope är snarare en plattform som består av verktyg (inklusive ett webbramverk) utvecklade utifrån Zope-filosofin och underhålls av Zope Corporation.
Zope har flera intressanta komponenter och funktioner som lämpar sig för utveckling av företagsapplikationer:
- En komponentregistrerings- och upptäcktsarkitektur för att konfigurera stora applikationer.
- ZODB – en objektbaserad databas för Python som lagrar objekt på ett naturligt sätt.
- Ett komplett ramverk och standarder för Content Management Systems.
- En uppsättning webbapplikationsramverk – det mest kända är fortfarande Zope, men flera nya ramverk (som Grok) har byggts ovanpå det.
- Starka standarder för mjukvaruutveckling, lansering och underhåll.
Är Zope rätt för dig?
Om du söker en strukturerad miljö för att utveckla riktigt stora applikationer är Zope ett bra val. Däremot kommer du förmodligen att stöta på en del problem. Zope fortsätter att utvecklas, men communityn är relativt liten. Många Python-utvecklare har inte ens hört talas om det. Det kan vara svårt att hitta handledningar och omfattande dokumentation. Du får vara beredd att leta en del (även om communityn är väldigt hjälpsam). Dessutom är det inte säkert att Python-utvecklare som du träffar är villiga att lära sig Zope och ”späda ut” sina kunskaper.
TurboGears
TurboGears är ett mycket flexibelt ramverk med en komponerbar arkitektur. Ramverket anpassar sig efter dina behov och du kan använda det för att skapa en enkel applikation i en fil eller ett stort system med flera lager.
TurboGears har några unika funktioner som antingen saknas i populära ramverk (som Django) eller är svåra att implementera:
- Utmärkt stöd för flera databaser.
- Transaktioner som omfattar flera databaser.
- Modulär – börja med en enkel fil och skala upp efter behov.
- En kraftfull ORM (SQLAlchemy, som är mer avancerad och kompetent än Djangos ORM).
- Anpassningsbar arkitektur baserad på WSGI-specifikationen.
- Inbyggt stöd för databasskärning.
- Ett funktionsdrivet gränssnitt istället för djupa och stela objektorienterade hierarkier.
Är TurboGears rätt för dig?
Om du vill utveckla på ett smidigt sätt och föredrar ett beprövat, moget och robust ramverk utan allt ”nästa generations”-hype, är TurboGears ett perfekt val. Det är mycket respekterat i communityn och har omfattande dokumentation. TurboGears är kanske inte det mest trendiga ramverket, vilket innebär att den första installationen och konfigurationen kan ta lite tid. Men det är ett idealiskt val för företagsapplikationsutveckling.
Web2py
Web2py startade som ett hobbyprojekt och släpptes 2007. Målet är att göra webbutveckling enkelt och tillgängligt för alla.
Web2py tar nollberoende till det extrema – det har inga krav, inget att installera och inkluderar en komplett webbaserad redigerare för utveckling, databashantering och distribution.
Du kan se det som Android Studio, som är mer en komplett miljö än bara ett ramverk. Några bra funktioner i Web2py är:
- Mycket låg inlärningströskel.
- Minimal kärna (endast 12 objekt), som till och med går att memorera!
- Ren Python-mall.
- Skydd mot XSS, CSRF och andra attacker.
- Ett användarvänligt och konsekvent API.
Är Web2py rätt för dig?
Web2py är ett stabilt och roligt ramverk, men det är svårt att rekommendera det framför andra alternativ som Django, Flask med flera. Det finns få jobb som använder Web2py och enhetstestning är inte dess starka sida. Men du kan uppskatta dess kod-API:er och användarupplevelsen som ramverket erbjuder, särskilt om du utvecklar REST API:er.
CherryPy
CherryPy är ett annat mikro-ramverk som syftar till att ge grundläggande ramverksfunktioner och sedan hålla sig ur vägen.
Trots att det är jämförbart med andra mikro-ramverk som Flask, har CherryPy en del unika egenskaper:
- Det har en inbyggd flertrådig server (något som saknas i Flask).
- Den enda webbservern kan hantera flera applikationer!
- Servera din applikation som en WSGI-app (för att koppla ihop den med andra WSGI-appar) eller som en vanlig HTTP-server (som ger bättre prestanda).
- Utmärkt stöd för profilering och enhetstester.
- Fungerar med PyPy (för de som är ute efter prestanda), Jython och till och med Android.
CherryPy erbjuder allt detta, och alla de vanliga funktionerna du kan förvänta dig av ett webbramverk.
Är CherryPy rätt för dig?
Om du i huvudsak utvecklar RESTful-tjänster är CherryPy ett mer seriöst alternativ än Flask. Det är ett ramverk som har utvecklats under ett decennium och är lämpligt för både små och stora applikationer.
Sanic
Framväxten av Node och dess asynkrona programmeringsmodell har lämnat många communityn efter, inklusive Python. Som svar har en mängd asynkrona webbramverk dykt upp, där Sanic är ett av dem.
Sanic är starkt inspirerat av Flask och använder samma vägdeklarationer, blueprints och andra grundläggande principer. De är inte rädda för att erkänna detta. Sanic erbjuder, för Flask-användare, en icke-blockerande I/O-modell för att uppnå samma prestanda som en Node-applikation. Kort sagt, Sanic är som Flask men med async/await-stöd!
Jämfört med CherryPy erbjuder Sanic betydligt bättre prestanda (tänk på hur det skulle jämföras med Flask!). Här är några resultat som testats av DataWeave:
Som du ser får CherryPy problem när antalet samtidiga anrop överstiger 50 per sekund och får hög felfrekvens.
Är Sanic rätt för dig?
Trots att Sanics prestanda är överlägsen alla andra, kanske det inte är det bästa valet för ditt nästa projekt. Den största nackdelen är bristen på asynkrona bibliotek. Större delen av befintliga Python-verktyg och bibliotek skrevs för den ensträngade CPython-versionen, utan att ta hänsyn till samtidighets- eller asynkrona operationer. Om till exempel din favorit-ORM inte stöder asynkrona operationer, blir hela poängen med att använda Sanic irrelevant.
På grund av dessa mognads- och tillgänglighetsskäl kommer vi inte att utforska fler asynkrona ramverk i Python.
Masonite
Jag stötte på det här ramverket för ett tag sedan och tyckte att det var ett steg i rätt riktning. Sedan dess har version 2.0 släppts och jag tycker att det är dags att uppmärksamma Masonite lite mer.
Kort sagt är Masonite Python-versionen av Laravel (ett populärt PHP-ramverk). Varför är det viktigt? Det är viktigt eftersom Laravel byggdes utifrån Ruby on Rails-principerna. Tillsammans gör dessa två ramverk det möjligt för utvecklare som inte använder Ruby att uppleva ”Rails Way”.
Utvecklare som använder Laravel (och till viss del Rails) kommer att känna sig som hemma och kan börja arbeta på nolltid. När jag provade Masonite (och rapporterade ett par problem, inklusive en bugg!), kunde jag bygga REST API:er utan att knappt behöva tänka, eftersom mitt Laravel-muskelminne gjorde allt.
Som ett fullständigt ramverk, har Masonite flera intressanta saker att erbjuda:
- En Active-record-baserad ORM.
- Databasmigreringar (som, till skillnad från Django, måste skapas av utvecklaren).
- En kraftfull IoC-container (Inversion of Control) för beroendeinjektion.
- Ett eget CLI (Command Line Interface) kallat ”craft” för att skapa strukturer och utföra uppgifter.
- Utmärkt stöd för enhetstester.
Den största ”rivalen” till Masonite är Django. Communityn försöker marknadsföra ramverket som enkelt, trevligt och nästa stora grej. Huruvida det kommer att överträffa Django återstår att se (om du frågar mig har det goda chanser). Om du vill ha en jämförelse mellan de två, kolla in här och här.
Är Masonite rätt för dig?
Masonite är fortfarande relativt nytt jämfört med Django, så det är inte givet att rekommendera det framför Django. Men om du gillar Rails (eller Laravel) kommer du förmodligen att uppskatta vad Masonite har att erbjuda. Det är ett idealiskt val för att snabbt bygga prototyper där allt behöver vara förkonfigurerat och lätt att anpassa.
Slutsats
Det finns gott om Python-ramverk, både stora och små. Även om du kan använda vilket ramverk som helst för ett litet projekt, har företagsapplikationer krav som inte alla ramverk kan uppfylla. Om du frågar mig, för företagsutveckling är Django (till viss del), Zope och TurboGears de mest lämpliga. Och av dessa föredrar jag TurboGears.
Men alla erfarna arkitekter kan ta ett mikro-ramverk och bygga sin egen struktur. Det är vad som händer i praktiken, vilket förklarar framgången för Flask och liknande ramverk.
Om du är nybörjare, är den här onlinekursen bra för att lära sig Python.
Utforska sedan de specialiserade Python-ramverken för att utveckla API:er.