Programmering

8 flotte små Python-webrammer

Pythons bekvemmelighed og alsidighed betyder, at den bruges til at opbygge software på næsten alle områder af it-livet. En vigtig niche er webtjenester, hvor Pythons udviklingshastighed og fleksible metaforer gør det let at få websteder i gang hurtigt.

Og ligesom du måske gætter, giver Python dig masser af valg og bredde i webrammer, både små og store. Når alt kommer til alt, skal ikke alle webprojekter være virksomhedsskala. De fleste skal være lige store nok til at få arbejdet gjort og ikke større. Denne artikel undersøger otte af de mest kendte Python-rammer, der understreger enkelhed, let levering og et tæt fokus.

Flaske

Flaske kan betragtes som en slags mini-kolbe, da den er endnu mere kompakt og kortfattet end det andet "mikroframework." På grund af sit minimale fodaftryk er Bottle ideel til inkludering i andre projekter eller til hurtig levering af små projekter som REST API'er. (Kolben diskuteres nedenfor.)

Hele codebase for Bottle passer i en enkelt fil og har absolut ingen eksterne afhængigheder. Alligevel er Bottle udstyret med nok funktionalitet til at opbygge almindelige slags webapps uden at stole på hjælp udefra.

Rutesystemet i Bottle, som kortlægger URL'er til funktioner, har næsten nøjagtigt den samme syntaks som Flask. Du er heller ikke begrænset til et fast kablet sæt stier; du kan oprette dem dynamisk. Data om anmodning og svar, cookies, forespørgselsvariabler, formulardata fra en POST-handling, HTTP-headere og filoverførsler kan alle fås til og manipuleres ved hjælp af objekter i Bottle.

Hver kapacitet er implementeret med god sans for detaljer. Med filoverførsler behøver du for eksempel ikke at omdøbe filen, hvis dens navngivningskonvention kolliderer med målfilsystemet (såsom skråstreg i navnet på Windows). Flaske kan gøre det for dig.

Bottle inkluderer sin egen enkle HTML-skabelonmotor. Igen, selvom det er minimal, har skabelonmotoren alt det væsentlige. Variabler inkluderet i en skabelon gengives som standard med sikker HTML; du skal angive, hvilke variabler der er sikre at gengive bogstaveligt. Hvis du hellere vil bytte Bottles skabelonmotor ud til en anden, såsom Jinja2, giver Bottle dig mulighed for at gøre det uden besvær. Jeg foretrækker det simple skabelonsystem, der følger med flaske; det er hurtigt, dets syntaks er uhøjtideligt, og det giver dig mulighed for at blande kode og skabelontekst uden unødige vanskeligheder.

Flaske understøtter endda flere server-bagender. Den leveres med sin egen indbyggede miniserver til hurtig test, men understøtter også generisk WSGI, en lang række WSGI-kompatible HTTP-servere og almindelig gammel CGI, hvis det er nødvendigt.

Flaske har ikke brug for så meget dokumentation som andre rammer, men dokumenterne er på ingen måde sparsomme. Alle de vigtige ting passer på en enkelt (omend lang) webside. Derudover finder du fuld dokumentation for hver API, eksempler til implementering på forskellige infrastrukturer, en forklaring på det indbyggede skabelonsprog og en række almindelige opskrifter.

Som med Flask kan du udvide flaskens funktionalitet manuelt eller via plug-ins. Flaske-plugins er ikke så mange som Flask, men der er nyttige stykker, såsom integration med forskellige databaselag og grundlæggende brugergodkendelse. Til async-support kan Bottle bruge en af ​​de eksisterende serveradaptere, der kører asynkront, såsom aiohttp / uvloop, men asynkroniser / afventer understøttes ikke indbygget.

En konsekvens af Bottles minimalisme er, at nogle ting simpelthen ikke er der. Formularvalidering, herunder funktioner som CSRF-beskyttelse (anmodning om forfalskning på tværs af websteder), er ikke inkluderet. Hvis du vil opbygge en webapplikation, der understøtter en høj grad af brugerinteraktion, skal du tilføje den support selv.

Et andet problem med Bottle er, at udviklingen er gået i stå; den sidste punktudgivelse, 0,12, ankom i 2013. Når det er sagt, fortsætter flasken med at blive vedligeholdt, og dens udviklingsudgivelser forbliver anvendelige til produktion. Udviklerne har til hensigt at levere nye versioner, der kaster støtte til ældre udgaver af Python.

CherryPy

CherryPy har eksisteret i en eller anden form i næsten 20 år, men har ikke mistet den minimalisme og elegance, der adskiller den fra starten.

Målet bag CherryPy, bortset fra kun at indeholde de nøgne bits, der er nødvendige for at betjene websider, er at så vidt muligt føle sig som en “web-ramme”, men som enhver anden form for Python-applikation. Websteder som Hulu og Netflix har brugt CherryPy i produktion, fordi rammen giver en meget diskret base at bygge videre på. CherryPy bruger samlede tråde under emhætten, jo bedre understøttes multitrådede serveradaptere.

CherryPy lader dig holde din webapplikation adskilt fra kernelogikken. For at kortlægge din applikations funktioner til URL'er eller ruter, der betjenes af CherryPy, opretter du en klasse, hvor objekternes navneområder tildeles direkte til de URL'er, du vil servere. For eksempel tilvejebringes roden af ​​hjemmesiden af ​​en funktion ved navn "indeks." Parametre, der sendes til disse funktioner, bruges til at håndtere variabler leveret af GET- eller POST-metoder.

De bits, som CherryPy inkluderer, er beregnet til at fungere som byggesten i lavt niveau. Sessionsidentifikatorer og cookiehåndtering er inkluderet, men HTML-skabelon er ikke. Ligesom Bottle tilbyder CherryPy en måde at kortlægge ruter til mapper på disken til statisk filbetjening.

CherryPy vil ofte henvise til et eksisterende tredjepartsbibliotek for at understøtte en funktion i stedet for at levere den indbygget. WebSocket-applikationer understøttes for eksempel ikke direkte af CherryPy, men gennem ws4py-biblioteket.

Dokumentationen til CherryPy inkluderer en praktisk tutorial gennemgang af de forskellige aspekter af programmet. Det tager dig ikke igennem en komplet ende-til-slut-applikation, i modsætning til nogle andre tutorial-rammer, men det er stadig nyttigt. Dokumenterne kommer med praktiske noter om implementering i virtuelle værter, omvendt proxy via Apache og Nginx og mange andre scenarier.

Falk

Hvis du bygger REST-baserede API'er og intet andet, blev Falcon lavet lige til dig. Magert og hurtigt, næsten uden afhængigheder ud over standardbiblioteket, leverer Falcon alt hvad du behøver til REST API'er og intet mere. Falcon 2.0, der blev udgivet i 2019, fjerner Python 2.x-support og kræver mindst Python 3.5.

En stor del af, hvorfor Falcon tjener "let og slank" -mærket, har ikke meget at gøre med antallet af kodelinjer i rammen. Det er fordi Falcon næsten ikke pålægger nogen egen struktur på applikationer. Alt, hvad en Falcon-applikation skal gøre, er at angive, hvilke funktioner der kortlægges til hvilke API-slutpunkter. At returnere JSON fra et slutpunkt involverer lidt mere end at oprette en rute og returnere dataene via json.dumps funktion fra Pythons standardbibliotek. Støtte til async er endnu ikke landet i Falcon, men der arbejdes på at få det til at ske i Falcon 3.0.

Falcon anvender også fornuftige standardindstillinger uden for kassen, så der er ikke behov for lidt tinkering til opsætningen. For eksempel er 404'er hævet som standard for enhver rute, der ikke udtrykkeligt er angivet. Hvis du vil returnere fejl til klienten, kan du rejse en af ​​et antal aktieundtagelser, der følger med rammen (f.eks. HTTPBadRequest) eller brug en generisk falcon.HTTPError undtagelse. Hvis du har brug for forbehandling eller efterbehandling til en rute, giver Falcon også kroge til dem.

Falcons fokus på API'er betyder, at der er lidt her til at opbygge webapps med konventionelle HTML-brugergrænseflader. Forvent ikke meget i form af formbehandlingsfunktioner og CSRF-beskyttelsesværktøjer, for eksempel. Når det er sagt, giver Falcon elegante muligheder for at udvide sin funktionalitet, så mere sofistikerede genstande kan bygges. Bortset fra den ovennævnte tilslutningsmekanisme finder du en grænseflade til oprettelse af middleware, der kan bruges til at pakke alle Falcons API'er.

Dokumentationen for Falcon er slank i forhold til andre rammer, men kun fordi der er mindre at dække. Brugervejledningen inkluderer en formel trin-for-trin gennemgang af alle vigtige funktioner sammen med en hurtigstartssektion, der giver dig mulighed for at se eksempler på kode med eller uden kommentar.

FastAPI

FastAPIs navn er en god sammenfatning af, hvad det gør. Det er bygget til hurtigt at oprette API-slutpunkter, og det kører også hurtigt.

FastAPI bruger Starlette-projektet til sin kerne med højhastighedsnetværk, men du behøver ikke vide noget om Starlette's interne for at bruge FastAPI. Du definerer slutpunkter på omtrent samme måde som en Flask- eller Bottle-app - brug dekoratører til at angive, hvilke funktioner der håndterer hvilke ruter - og returner derefter ordbøger, der automatisk oversættes til JSON.

Du kan nemt tilsidesætte, hvordan ting returneres. For eksempel, hvis du vil returnere HTML / XML fra nogle slutpunkter, kan du gøre det ved blot at returnere en brugerdefineret Respons objekt. Hvis du vil tilføje brugerdefineret middleware, kan du klikke på alt, hvad der følger ASGI-standarden.

FastAPI gør brug af Pythons typehinting for at give begrænsninger for den slags data, som ruter accepterer. For eksempel, hvis du har en rute med typen Valgfri [int], FastAPI afviser alle indsendelser undtagen heltal. Du behøver ikke at tilføje datavalideringskode til dine slutpunkter; du kan bare bruge typetips og lade FastAPI udføre arbejdet.

Naturligvis er nogle ting udeladt. Der er for eksempel ingen native HTML-skabelonmotor, men der mangler ikke tredjepartsløsninger til at udfylde dette hul. Det samme med databaseforbindelse, men dokumentationen indeholder detaljer om, hvordan man lokker visse ORM'er (f.eks. Peewee) til at arbejde med FastAPIs async-opførsel.

Kolbe

Mange diskussioner om Python-webrammer begynder med Flask og med god grund. Flask er en veletableret, velforstået ramme, der er nem at bruge og ret stabil. Det er næsten umuligt at gå galt ved hjælp af Flask til et let webprojekt eller en grundlæggende REST API, men du vil stå over for tunge løft, hvis du prøver at bygge noget større.

Flaskes centrale appel er dens lave adgangsbarriere. En grundlæggende "hej verden" -app kan oprettes på færre end 10 linjer Python. Kolben indeholder et meget brugt HTML-skabelonsystem, Jinja2, for at gøre gengivelse af tekst let, men Jinja2 kan byttes ud med et hvilket som helst antal andre skabelonmotorer (såsom overskæg), eller du kan rulle din egen.

I enkelhedens navn udelader Flask lækkerier som et datalag eller ORM og tilbyder ingen bestemmelser for formularvalidering. Flask kan dog udvides gennem udvidelser, hvoraf der er snesevis af, der dækker mange almindelige brugssager såsom caching, formhåndtering og validering og databaseforbindelse. Dette lean-by-standard design giver dig mulighed for at begynde at konstruere en Flask-applikation med det absolutte minimum af funktionalitet og derefter kun lag i de stykker, du har brug for, når du har brug for dem.

Flaskens dokumentation er genial og let at læse. Quick-start-dokumentet gør et fremragende stykke arbejde med at komme i gang, mens det også forklarer betydningen af ​​standardvalgene for en simpel Flask-applikation, og API-dokumenterne er fyldt med gode eksempler. Også fremragende er samlingen af ​​Flash-uddrag, som er hurtige og beskidte eksempler på, hvordan man udfører specifikke opgaver, såsom hvordan man returnerer et objekt, hvis det findes, eller en 404-fejl, hvis det ikke gør det.

Flask ramte sin milepæl 1.0-udgivelse i 2018, hvor Python 2.6 og Python 3.3 var de mindst understøttede versioner, og med mange af dens adfærd endelig sat i sten. Flask understøtter ikke eksplicit Pythons async-syntaks, men en API-kompatibel variant af Flask kaldet Quart er blevet udskilt for at tilfredsstille dette krav.

Pyramide

Lille og let Pyramid er velegnet til opgaver såsom at eksponere eksisterende Python-kode som en REST API eller give kernen til et webprojekt, hvor udvikleren gør det meste af det tunge løft.

”Pyramide giver dig mulighed for hurtigt at blive produktiv og vokse med dig,” siger dokumentationen. "Det holder dig ikke tilbage, når din applikation er lille, og den kommer ikke i vejen for dig, når din applikation bliver stor."

En god måde at beskrive Pyramidens minimalisme på ville være "fri for politik", et udtryk, der bruges i det afsnit af dokumentationen, der diskuterer, hvordan Pyramid former sig i forhold til andre webrammer. Dybest set betyder "fri for politik", at hvilken database eller hvilket skabelonsprog, du vælger at bruge, ikke er Pyramidens bekymring.

Meget lidt arbejde er nødvendigt for at opbygge en grundlæggende Pyramid-applikation. Som med flaske og kolbe kan en Pyramid-applikation bestå af en enkelt Python-fil bortset fra filerne til selve rammen. En simpel en-rute-API kræver ikke mere end et dusin linjer kodekode. Det meste af det er kedelplade ligesom fra ... import erklæringer og opsætning af WSGI-serveren.

Som standard inkluderer Pyramid flere elementer, der er almindelige i webapps, men de leveres som komponenter, der skal sys sammen, ikke som fuldblæste løsninger. Støtte til brugersessioner, for eksempel, kommer endda med CSRF-beskyttelse. Men support til brugerkonti, såsom logins eller kontoadministration, er ikke en del af aftalen. Du bliver nødt til at rulle det selv eller tilføje det via et plug-in. Det samme gælder for formhåndtering og databaseforbindelser.

Pyramid giver endda en måde at oprette skabeloner fra tidligere Pyramid-projekter til at genbruge tidligere arbejde. Disse skabeloner, kaldet "stilladser", genererer en Pyramid-app med enkel routing og nogle starter HTML / CSS-skabeloner. Medfølgende stilladser inkluderer et eksempel på startprojekt og et projekt, der forbinder til databaser via det populære Python-bibliotek SQLAlchemy.