Python kan oppleves som både et underholdende verktøy og et kraftfullt verktøy med mange bruksområder. Denne dualiteten gjenspeiler mangfoldet i hva man kan utrette med Python.
Python er populært blant både hobbyentusiaster, forskere og systemarkitekter.
Det er kjent for å være lett å komme i gang med, samtidig som det tilbyr avanserte abstraksjoner og metaprogrammeringsmuligheter for å skape store, komplekse systemer. Et stort utvalg av biblioteker gjør det mulig å bruke Python til nesten alle tenkelige formål. Selv om samtidighet og statisk typing kan representere utfordringer, finnes det måter å omgå disse.
I denne artikkelen skal vi se nærmere på noen av de mest anerkjente Python-rammeverkene for utvikling av både små og store webapplikasjoner.
Django
Django har bevist sin verdi over tid og er det foretrukne valget for mange i Python-miljøet. Hvis du skulle vekke en Python-utvikler midt på natten og tvinge dem til å lage en webapplikasjon, er sjansen stor for at de automatisk ville velge Django, på samme måte som en Ruby-utvikler ville strekke seg etter Rails.
Dette er det gode grunner til. Django beskrives som «et webrammeverk for perfeksjonister med tidsfrister». Det er et såkalt «batterier inkludert»-rammeverk, som Python selv, og tilbyr standardfunksjonalitet direkte fra start.
Med denne innebygde funksjonaliteten reduserer Django utviklingstiden betraktelig:
- En praktisk og brukervennlig ORM, som automatisk oppretter og håndterer migreringer.
- Mulighet for automatisk generering av et administrasjonspanel basert på dine datamodeller.
- Støtte for informasjonskapsler, økter, mellomvare og maler.
- Automatiske sikkerhetsfunksjoner, som beskyttelse mot XSS- og CSRF-angrep.
- Kompatibilitet med de fleste databaser (adaptere finnes enkelt der offisiell støtte mangler).
- Avansert støtte for geografiske data og romlige spørringer (GeoDjango).
Django er et komplett og brukervennlig webrammeverk.
Passer Django for deg?
Absolutt. Django er et utmerket valg for de fleste bruksområder, enten det er rask prototyping eller utvikling av en større bedriftsapplikasjon. Den største ulempen er at rammeverket legger føringer på strukturen (også kjent som «konvensjon fremfor konfigurasjon»), noe som noen ganger kan oppleves som begrensende. Hvis du for eksempel ønsker å erstatte Djangos ORM med et annet alternativ (som SQL Alchemy), må du være forberedt på visse utfordringer.
Er du interessert i å bli en fullstack-utvikler med Django og Python? Sjekk ut dette fantastiske nettkurset.
Flask
Mens Django dominerer mye av diskusjonen rundt webutvikling med Python, er Flask en sterk konkurrent.
I motsetning til Django, er Flask et «mikro-rammeverk». Det fokuserer på å gjøre noen få ting veldig bra, og overlater resten til utvikleren. Dette kan være både en kilde til frustrasjon og en kilde til glede, avhengig av dine behov. For de som vet hva de gjør og ønsker å skreddersy sine egne webapplikasjoner ved å velge de komponentene de ønsker, er Flask et utmerket valg.
Flask tilbyr følgende funksjoner:
- Ruting, maler, øktadministrasjon og andre nyttige funksjoner.
- Full støtte for enhetstesting.
- En minimalistisk og utvidbar arkitektur.
- Avansert REST-støtte.
- Støtte for Blueprints, Flasks unike arkitektur for mindre webapplikasjoner.
- Frihet til å velge egne pakker for ORM, migreringer, osv.
- Fleksibel applikasjonsstruktur – filene dine kan plasseres der det gir mest mening.
- Visning av statiske filer.
- WGSI-kompatibilitet.
Passer Flask for deg?
Som nevnt, er Flask et minimalistisk rammeverk der komponentene kan byttes ut. Hvis du har dårlig tid og ønsker å bygge en prototype raskt, kan det hende du bruker mye tid på å ta trivielle avgjørelser om databaser, mappestrukturer, ruting, osv. Flask fungerer best for større, mer stabile prosjekter, spesielt REST API-er.
Bottle
Hvis du synes Flask er litt for omfangsrikt, og du ønsker enda mer kontroll, bør du sjekke ut Bottle.
Bottle har strippet vekk enda mer av funksjonaliteten, og avhengighetene begrenser seg til standardbiblioteket i Python. Dette betyr at du ikke trenger å installere noe ekstra med pip, selv om du sannsynligvis vil trenge det etterhvert. Dette gjør at Bottle skiller seg ut for noen:
- Distribusjon med en enkelt fil. Hele applikasjonen ligger i en enkelt «.py»-fil.
- Ingen eksterne avhengigheter. Hvis du har en kompatibel Python-versjon, er du klar.
- Inkluderer en malmotor, som kan erstattes med Jinja2, Mako eller Cheetah.
- Støtte for skjemaer, overskrifter, informasjonskapsler og filopplasting.
- Innebygd webserver, som enkelt kan byttes ut.
Passer Bottle for deg?
Hvis du skal bygge en svært liten applikasjon (mindre enn 500 linjer med kode) uten spesielle krav, kan Bottle være et godt valg. Det er en grei tilnærming til webutvikling. I praksis vil du sannsynligvis oppleve at Bottle blir mer en hindring enn en hjelp. Virkeligheten er i stadig endring, og nye krav vil dukke opp. Å ha alt samlet i en enkelt fil vil fort bli tungvint. Det er også verdt å nevne at Bottle og Flask er ganske like. Det har vært forslag om å slå sammen de to helt tilbake til 2012, og Armin, skaperen av Flask, er enig. Marcel, skaperen av Bottle, er imidlertid strengt imot dette på grunn av Bottles fokus på enkeltfiler.
Zope
Zope er komplekst, men la meg prøve å forklare. Det er et webrammeverk som kan brukes til å lage både små og store applikasjoner, men det er mer enn det. Zope er en plattform som består av verktøy (inkludert et webrammeverk) som er utviklet under Zope-filosofien og vedlikeholdes av Zope Corporation.
Zope har flere interessante komponenter og funksjoner som er egnet for utvikling av bedriftsapplikasjoner:
- En komponentregister- og detekteringsarkitektur for å konfigurere store applikasjoner.
- ZODB – en objektdatabase for Python som lagrer objekter naturlig.
- Fullstendig rammeverk og standarder for innholdsstyringssystemer.
- Et sett med webapplikasjonsrammeverk – det mest kjente er Zope, men det finnes også nyere rammeverk (som Grok) som er bygget oppå det.
- Sterke standarder for programvareutvikling, publisering og vedlikehold.
Passer Zope for deg?
Hvis du ønsker et svært strukturert miljø for å bygge store applikasjoner, er Zope et godt alternativ. Samtidig må du være forberedt på noen utfordringer. Selv om Zope er under utvikling, er miljøet relativt lite. Mange Python-utviklere har ikke engang hørt om det. Det er vanskelig å finne veiledninger og omfattende dokumentasjon, så vær forberedt på å måtte grave litt (selv om fellesskapet er svært hjelpsomt!). I tillegg vil kanskje ikke Python-utviklerne du jobber med være villig til å lære Zope og «utvanne» ferdighetene sine.
TurboGears
TurboGears er et fleksibelt rammeverk med en modulær arkitektur. Det tilpasses dine behov, og kan brukes til å lage enkle applikasjoner eller store systemer.
TurboGears har flere elegante funksjoner, som enten mangler i andre populære rammeverk (som Django), eller er vanskelig å implementere:
- Avansert støtte for flere databaser.
- Transaksjoner over flere databaser.
- Modulær – start med én enkelt fil og skaler etter behov.
- En kraftig ORM (SQLAlchemy, som er mer moden enn Djangos ORM).
- Modulær arkitektur basert på WSGI-spesifikasjonen.
- Innebygd støtte for database-sharding.
- Et funksjonsdrevet grensesnitt, i motsetning til dype, rigide objektorienterte hierarkier.
Passer TurboGears for deg?
Hvis du vil ha et testet, modent og robust rammeverk utenfor den vanlige «fancy» trenden, er TurboGears et perfekt valg. Det er anerkjent i miljøet og har grundig dokumentasjon. TurboGears er ikke selvkjørende, og oppsettet kan ta litt tid. Men det er et ideelt rammeverk for utvikling av større bedriftsapplikasjoner.
Web2py
Web2py startet som et hobbyprosjekt og ble publisert i 2007. Målet er å gjøre webutvikling enkelt og tilgjengelig for alle.
Web2py tar nullavhengighetsprinsippet til det ekstreme. Det krever ingenting å installere, og inkluderer en fullverdig nettbasert editor for utvikling, databaseadministrasjon og distribusjon.
Det er nesten som et komplett miljø, og ikke bare et rammeverk. Noen av de fine funksjonene som Web2py har er:
- Svært lav læringskurve.
- Minimal kjerne (kun 12 objekter) som til og med kan memoreres!
- Pure-Python maler.
- Beskyttelse mot XSS, CSRF og andre angrep.
- Et brukervennlig og konsistent API.
Passer Web2py for deg?
Web2py er et stabilt og morsomt rammeverk, men det er vanskelig å anbefale det fremfor andre alternativer som Django og Flask. Det finnes få jobber, og støtten for enhetstesting er ikke veldig god. Samtidig kan du oppleve at APIet er godt og at rammeverket er givende å bruke, spesielt hvis du utvikler REST API-er.
CherryPy
CherryPy er et annet mikro-rammeverk med mål om å levere grunnleggende funksjonalitet raskt.
Selv om det kan sammenlignes med mikro-rammeverk som Flask, har CherryPy noen unike egenskaper:
- Det inkluderer en innebygd multitrådet server (noe som fortsatt er på ønskelisten for Flask).
- Webserveren kan hoste flere applikasjoner samtidig!
- Server applikasjonen din som en WSGI-app (for å integrere med andre WSGI-apper) eller som en vanlig HTTP-server (som gir bedre ytelse).
- Avansert støtte for profilering og enhetstesting.
- Kan kjøres på PyPy (for de som er opptatt av ytelse), Jython og til og med Android.
CherryPy gjør alt dette, i tillegg til de vanlige funksjonene man forventer av et webrammeverk.
Passer CherryPy for deg?
Hvis du hovedsakelig utvikler RESTful-tjenester, er CherryPy et mer seriøst alternativ enn Flask. Det er et rammeverk som har eksistert lenge og modnet godt, og som fungerer for både små og store applikasjoner.
Sanic
Fremveksten av Node og den asynkrone programmeringsmodellen førte til at mange ble hengende etter, inkludert Python-miljøet. Som et svar på dette, har det dukket opp en rekke asynkrone webrammeverk. Sanic er ett av dem.
Sanic er inspirert av Flask, og har lånt rutingsdekoratører, Blueprints og andre grunnleggende funksjoner. Sanic tilbyr ekte ikke-blokkerende I/O for å matche ytelsen til en Node-applikasjon. Sanic er rett og slett Flask med asynkron/await-støtte!
Sammenlignet med CherryPy har Sanic en utrolig ytelsesfordel (bare tenk på hvordan det ville klart seg mot Flask!). Her er noen resultater testet av DataWeave:
Som du ser, når antallet samtidige brukere overstiger 50 per sekund, sliter CherryPy og gir en høy feilrate.
Passer Sanic for deg?
Selv om ytelsen til Sanic er overlegen, er det ikke sikkert at det er det beste valget for ditt neste prosjekt. Hovedårsaken er mangelen på asynkrone biblioteker. De fleste eksisterende Python-verktøy og biblioteker er skrevet for den en-trådede CPython-versjonen, uten tanke på høy samtidighet eller asynkrone operasjoner. Hvis din favoritt-ORM for eksempel ikke støtter asynkrone operasjoner, er hele poenget med å bruke Sanic borte.
Av disse årsakene vil vi ikke gå mer i dybden på asynkrone rammeverk i Python.
Masonite
Jeg kom over dette rammeverket for en stund siden, og følte at det var et steg i riktig retning. Siden den gang har versjon 2.0 blitt publisert, og jeg synes tiden er inne for å gi Masonite litt oppmerksomhet.
Masonite er rett og slett Python-versjonen av Laravel (et kjent PHP-rammeverk). Hvorfor er dette viktig? Fordi Laravel er bygget på prinsippene til Ruby on Rails. Disse rammeverkene lar ikke-Ruby-utviklere oppleve “Rails Way” for å gjøre ting.
Laravel (og til en viss grad Rails)-utviklere vil føle seg hjemme og raskt komme i gang med Masonite. Da jeg testet Masonite var jeg i stand til å utvikle REST API-er uten å tenke noe særlig, fordi min Laravel-muskelhukommelse gjorde alt automatisk.
Som et fullstack-rammeverk med «batterier inkludert», tilbyr Masonite:
- En aktiv-record ORM.
- Databasemigrering (som, i motsetning til Django, må opprettes av utvikleren).
- En kraftig IoC-beholder for dependency injection.
- Et eget CLI (kalt «craft») for stillas- og kjøreoppgaver.
- Avansert støtte for enhetstesting.
Den største «rivalen» til Masonite er Django. Utviklerne prøver å promotere rammeverket som enkelt, herlig og det neste store. Om det vil overgå Django, vil tiden vise. Se her og her for en diskusjon som sammenligner de to.
Passer Masonite for deg?
Masonite er fortsatt et ungt rammeverk sammenlignet med Django, så det kan ikke anbefales fremfor Django. Samtidig vil du, hvis du er interessert i Rails- eller Laravel-metoden, sette pris på hva Masonite har å tilby. Det er ideelt for å raskt utvikle prototyper som krever at alt er ferdig konfigurert.
Konklusjon
Det er mange Python-rammeverk der ute, både store og små. For et lite prosjekt kan du velge nesten hva som helst. For en bedriftsapplikasjon er kravene mer spesifikke. For bedriftsutvikling er Django (til en viss grad), Zope og TurboGears de mest relevante. Jeg personlig heller mot TurboGears.
Enhver erfaren arkitekt kan plukke opp et mikro-rammeverk og utvikle sin egen arkitektur. Dette er i stor grad det som skjer i praksis, og forklarer suksessen til Flask og lignende alternativer.
Hvis du er nybegynner, vil dette nettkurset være nyttig for å lære Python.
Etter det, kan du utforske noen av de spesialiserte Python-rammeverkene for å bygge API-er.