9 bästa Python-ramverk för att bygga små till företagsapplikationer

Python är både en rolig leksak och en skrämmande eldkastare. Detsamma gäller vad du kan göra med Python.

Python är älskad av både hobbyister, forskare och arkitekter.

Det är jävligt lätt att komma igång med, har abstraktioner av högre ordning och metaprogrammeringsmöjligheter för att bygga stora och komplexa system, och har massor av bibliotek för att göra i stort sett vad som helst. Visst, det finns begränsningar när det gäller samtidighet och starkt skrivande, men du kan kringgå dem.

I den här artikeln kommer vi att kasta en titt på några av de bästa Python-ramverken när det gäller att bygga stora och små webbapplikationer.

Django

De Django ramverket har stått emot tidens tand, go-to-webramverket för Python-communityt. Om du anföll en Python-utvecklare i sömnen och tvingade dem att bygga en webbapplikation med pistolhot, skulle de automatiskt sträcka sig efter Django på samma sätt som en Rubyist kommer att nå Rails.

Och det finns en bra anledning till det. Django är, som slagordet säger, ”ett webbramverk för perfektionister med deadlines.” Det är vad som kallas ett ramverk för ”inkluderade batterier” (ungefär som Python är ett språk som ingår i batterier), som tillhandahåller alla vanliga funktioner direkt från förpackningen.

Med dessa funktioner inbakade, skär Django kraftigt ned på utvecklingstiden:

  • En behändig och trevlig ORM, med migrationer som skapas och tillämpas automatiskt av ramverket.
  • Ställningar för automatisk generering av adminpanel baserat på dina modeller.
  • Stöd för cookies, sessioner, mellanprogram, mallar, etc.
  • Säkerhetsfunktioner som XSS-förebyggande, CRSF-förebyggande, etc., tillämpas automatiskt.
  • Fungerar med praktiskt taget alla databaser där ute (det är lätt att hitta adaptrar där officiellt stöd inte finns)
  • Förstklassigt stöd för geografiska data och rumsliga frågor dock GeoDjango

Och mycket, mycket mer. Det räcker med att säga att Django är ett fullt utvecklat, vänligt webbramverk.

Är Django något för dig?

Absolut ja.

Django är utmärkt för alla användningsfall, oavsett om det gäller snabb prototyp eller planering av en företagsapplikation. Den enda grova kanten du kommer att stöta på är ramverkets struktur. Eftersom Django böjer sig bakåt för att göra utvecklingen snabb och enkel för dig, påtvingar den utvecklaren sin struktur (ett koncept som kallas ”konvention över konfiguration”), vilket du kanske inte håller med om. Om du till exempel vill ersätta Django ORM med något annat (säg SQL Alchemy), var beredd på överraskningar.

Intresserad av att bli fullstackutvecklare med Django och Python? – Kolla in det här fantastisk onlinekurs.

Flaska

Medan Django tar upp nästan all mindshare i Python webbutveckling, Flaska är en stark utmanare.

Till skillnad från Django är Flask ett ”mikro-ramverk”, vilket innebär att det fokuserar på att få ett fåtal, absoluta minimum saker rätt, och lämnar resten till dig. Detta ”resten är upp till dig” kan vara en källa till frustration eller glädje, beroende på vad dina mål är. För dem som vet vad de gör och som kärleksfullt vill skapa sina webbapplikationer genom att välja komponenter efter eget val, är Flask en gåva från gud.

Flask erbjuder följande funktioner:

  • Routing, mall, sessionshantering och andra användbara funktioner.
  • Fullständigt stöd för enhetstestning
  • En minimal, pluggbar arkitektur
  • Förstklassigt REST-stöd
  • Stöd för Blueprints, Flasks unika inställning till arkitektur för små webbapplikationer
  • Välj dina paket för ORM, migrering, etc.
  • Flexibel applikationsstruktur – placera dina filer där de är mest meningsfulla för dig
  • Statisk filvisning
  • WGSI-kompatibel

Är Flask något för dig?

Som redan sagt är Flask ett minimalt webbramverk, med allt uppdelat i individuella komponenter som du kan byta ut. Om du har bråttom att bygga en prototyp kommer du att lägga mycket tid på att ta triviala beslut om databasen, mappstruktur, routing, etc., som kan visa sig vara kontraproduktiva. Flask fungerar bäst när du håller på med ett stabilt, seriöst projekt av medelstora till stora, speciellt REST API:er.

Flaska

Om du tyckte att Flasks tillvägagångssätt inte var tillräckligt minimalt och att du fortfarande skulle vilja ha mer kontroll, säg hej till Flaska.

Flaskan tappas ut ännu mer, till den punkt där det enda beroendet är Python-standardbiblioteket. Det betyder att ingen pip-installera detta eller pip-installera det, även om du sannolikt skulle behöva det inom kort. Här är varför Bottle sticker ut för vissa människor:

  • Enfilsdistribution. Ja, hela din ansökan finns i en enda ”.py”-fil.
  • Inga externa beroenden. Om du har rätt Python-version installerad är du bra att gå.
  • Levererar sin mallmotor, som kan bytas ut mot Jinja2, Mako eller Cheetah.
  • Stöd för formulär, rubriker, cookies och filuppladdningar.
  • Inbyggd webbserver, som enkelt kan bytas ut.

Är Bottle något för dig?

Om du gör en riktigt liten app (säg mindre än 500 rader kod) utan några speciella krav, kan Bottle vara mycket vettigt för dig. Det är ett fullständigt no-nonsens tillvägagångssätt för att skapa webbappar, men i praktiken kommer du att upptäcka att du blir mer hindrad än hjälpt av Bottle. Anledningen är att den verkliga världen alltid förändras och innan du vet ordet av. Nya krav kommer att släppas på ditt huvud. Vid den tidpunkten skulle det bli ett jobb att lägga allt i en enda fil.

Dessutom, om du tror att Bottle och Flask är nästan likadana, har du rätt. Förslag av sammanslagning de två går tillbaka till 2012, och även Armin, skaparen av Flask, håller med om det. Marcel, skaparen av Bottle, upprätthåller dock en strikt ideologisk distinktion på grund av sin enfilsstrategi och insisterar på att de två förblir åtskilda.

Zope

Zope är komplicerat att förklara, men jag ska försöka. Ja, det är ett webbramverk som kan användas för att bygga stora eller små applikationer, men det är inte allt. Zope är mer en plattform som består av verktyg (webbramverk ingår) skapade under Zope-filosofin och underhålls av Zope Corporation.

Zope har flera intressanta komponenter och funktioner som är lämpliga för företagsapplikationsutveckling:

  • En komponentregistrerings- och upptäcktsarkitektur för att konfigurera en stor app.
  • ZODB — (den enda) objektdatabasen för Python för att lagra objekt inbyggt.
  • Fullständigt ramverk och standarder för Content Management Systems
  • En uppsättning webbapplikationsramverk — den kanoniska kallas fortfarande Zope, även om flera nya ramverk (som Grok) har byggts ovanpå den.
  • Starka standarder för mjukvaruutveckling, release och underhåll.

Är Zope något för dig?

Om du är ute efter en mycket strukturerad miljö för att bygga riktigt stora appar är Zope bra. Som sagt, du kommer att stöta på din beskärda del av problem också. Medan Zope fortsätter att utvecklas är communityn väldigt liten, till den grad att många Python-utvecklare inte ens har hört talas om det. Det är svårt att hitta tutorials och omfattande dokumentation, så var beredd på att gräva mycket runt (även om communityn är väldigt hjälpsam!). Dessutom kanske de Python-utvecklare du stöter på kanske inte vill lära sig Zope och ”späda ut” sina färdigheter.

TurboGears

TurboGears är ett mycket flexibelt ramverk som har en genuint komponerbar arkitektur. Det är ett ramverk som skalas enligt dina behov, och du kan använda det för att bygga en applikation med en fil eller en gigant med flera hyresrätter.

TurboGears har några eleganta funktioner, av vilka några antingen inte finns i populära ramverk (som Django) eller är svåra att bygga:

  • Förstklassigt stöd för flera databaser
  • Transaktioner med flera databaser
  • Mycket modulärt – börja med en enda fil och skala ut så mycket du behöver
  • En kraftfull ORM (SQLAlchemy, som är mer mogen och kapabel än Djangos ORM)
  • Pluggbar arkitektur baserad på WSGI-specifikationen
  • Inbyggt stöd för databasskärning
  • Ett funktionsdrivet gränssnitt till skillnad från djupa, stela objektorienterade hierarkier.

Är TurboGears något för dig?

Om du vill utvecklas med glädje och vill ha ett testat, moget och robust ramverk borta från mediebruset från ”awesome, next-gen” och allt det där, är TurboGears en perfekt passform. Det är mycket respekterat i samhället och har fullständig, omfattande dokumentation. Visst, TurboGears är inte påstådd, vilket innebär att den initiala installations- och konfigurationstiden kan vara längre, men det är det idealiska ramverket för företagsapplikationsutveckling.

Web2py

Web2py startade som ett hobbyprojekt och släpptes 2007. Dess mål är att göra webbutveckling enkel och tillgänglig för alla.

Som ett resultat tar Web2py nollberoendet till det yttersta – det har inga krav, inget att installera, och inkluderar en fullfjädrad webbaserad redigerare för utveckling, databashantering och distribution.

Du kan nästan se det som Android Studio, som är mer en komplett miljö än bara ett ramverk. Några trevliga funktioner som Web2py har är:

  • Praktiskt taget ingen inlärningskurva.
  • Minimal kärna (endast 12 objekt), som till och med kan memoreras!
  • Pure-Python-mall
  • Skydd mot XSS, CSRF och andra attacker
  • Ett trevligt och konsekvent API

Är Web2py något för dig?

Web2py är ett stabilt och roligt ramverk, men det är svårt att rekommendera det mot andra alternativ som Django, Flask, etc. Det finns knappt några jobb, och historien om enhetstestning är inte bra. Som sagt, du kanske kan njuta av kod-API:er och den övergripande upplevelsen som ramverket erbjuder, särskilt om du bygger REST API:er.

CherryPy

CherryPy är ett annat mikroramverk som syftar till att tillhandahålla grundläggande ramverksfunktionalitet och snabbt komma ur vägen.

Även om det är jämförbart med andra mikroframeworks som Flask, har CherryPy en viss skillnad:

  • Den innehåller en inbyggd flertrådig server (något som finns kvar på Flasks önskelista)
  • Den (enda) webbservern kan vara värd för flera applikationer!
  • Servera din applikation som en WSGI-app (för gränssnitt med andra WSGI-appar) eller en vanlig HTTP-server (som presterar bättre)
  • Förstklassigt stöd för profilering och enhetstester
  • Körs på PyPy (för de verkliga prestationsjunkiesna), Jython och till och med Android

CherryPy gör allt detta, och sedan det vanliga du kan förvänta dig av ett webbramverk.

Är CherryPy något för dig?

Om du mestadels bygger RESTful-tjänster är CherryPy en mycket mer seriös utmanare än Flask. Det är ett decennium gammalt ramverk som har mognat bra och är lämpligt för både små och stora applikationer.

Sanic

Framväxten av Node och dess asynkrona programmeringsmodell lämnade många gemenskaper bakom sig, inklusive Pythons. Som svar har en uppsjö av asynkrona webbramverk dykt upp på radarn, Sanic vara en av dem.

Sanic är starkt inspirerad av Flask, till den grad att den lånade vägdekoratörerna, ritningar och andra grundläggande detaljer kroklina och sänke. Och de skäms inte för att erkänna det. Vad Sanic tillför bordet, om du är ett Flask-fan, är äkta icke-blockerande I/O för att möta prestandanivåerna för en Node-applikation. Med andra ord, Sanic är Flask med async/await-stöd!

Jämfört med CherryPy har Sanic en otrolig prestandafördel (tänk bara på hur det skulle klara sig mot Flask!). Kolla in följande resultat testade av DataWeave:

Som du kan se, när samtidiga siffror börjar överstiga 50 per sekund, kvävs CherryPy praktiskt taget och ger upphov till en hög felfrekvens.

Är Sanic något för dig?

Även om prestandaegenskaperna hos Sanic blåser allt annat ur vattnet, kanske det inte är det bästa valet för ditt nästa projekt. Den främsta orsaken är bristen på asynkrona bibliotek. Huvuddelen av befintliga Python-verktyg och bibliotek skrevs för den entrådade CPython-versionen, utan att tänka på hög samtidighet eller asynkrona operationer. Om till exempel din favorit-ORM inte stöder asynkrona operationer, blir hela poängen med att använda Sanic besegrad.

På grund av dessa mognads- och tillgänglighetsskäl kommer vi inte att undersöka fler asynkrona ramverk i Python.

Masonit

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 känner att det äntligen är dags att ge Masonit lite kärlek.

Enkelt uttryckt är Masonite Python-versionen av Laravel (ett berömt PHP-ramverk, om du inte visste det). Varför spelar det någon roll? Det spelar roll eftersom Laravel byggdes på Ruby on Rails principer, och tillsammans gör dessa två ramverk det möjligt för icke-Ruby-utvecklare att uppleva ”Rails Way” att göra saker.

Laravels (och till viss del Rails) utvecklare kommer att känna sig som hemma och skulle vara igång på bokstavligen nolltid. När jag provade Masonite (och jag skickade in ett problem eller två, inklusive en bugg!), kunde jag bygga REST API:er med exakt noll tänkande eftersom mitt Laravel-muskelminne gjorde allt.

Som ett ramverk med batterier i full stack, tar Masonite med sig flera intressanta saker till bordet:

  • Active-record stil ORM
  • Databasmigreringar (som, till skillnad från Django, måste skapas av utvecklaren)
  • En kraftfull IoC-behållare för beroendeinjektion
  • Egen CLI (kallad ”craft”) för byggnadsställningar och löpande uppgifter
  • Förstklassigt stöd för enhetstestning

Den största ”rivalen” för Masonite är Django, eftersom communityn gör sitt bästa för att marknadsföra ramverket som enkelt, förtjusande och nästa stora grej. Huruvida det kommer att överträffa Django är något tiden kommer att utvisa (om du frågar mig, det har en anständig chans), men för en diskussion som jämför de två, se här och här.

Är Masonite något för dig?

Masonite är fortfarande en baby jämfört med Django, så det finns inget sätt att rekommendera det framför Django. Som sagt, om du gillar Rails (eller Laravel-sättet) att göra saker, skulle du uppskatta vad Masonite har att erbjuda. Den är idealisk för att snabbt bygga prototyper som behöver allt förkonfigurerat och lätt att byta.

Slutsats

Det finns ingen brist på Python-ramverk där ute, stora som små. Även om du kan hämta i stort sett vad som helst för ett litet projekt, har en företagsapplikation krav som inte många av dessa ramverk kan uppfylla. Om du frågar mig, för företagsutveckling är Django (till viss del), Zope och TurboGears det som kommer att tänka på. Och även bland dem är jag benägen till TurboGears.

Som sagt, vilken arkitekt som helst som är värd sitt salt kan plocka upp en mikroram och rulla ut sin arkitektur. Och detta är i stort sett vad som händer i praktiken, vilket förklarar framgången med Flask och liknande idéer.

Om du är nybörjare, då denna onlinekurs skulle vara bra att lära sig Python.

Utforska sedan några av de specialiserade Python-ramverken för att bygga API:er.