8 fantastici piccoli framework web Python

La praticità e la versatilità di Python significano che viene utilizzato per creare software in quasi ogni fase della vita IT. Una delle nicchie principali sono i servizi Web, in cui la velocità di sviluppo di Python e le metafore flessibili rendono facile rendere operativi i siti Web rapidamente.

E proprio come puoi immaginare, Python ti offre molte scelte e latitudine nei framework web, sia piccoli che grandi. Dopotutto, non tutti i progetti web devono essere su scala aziendale. La maggior parte dovrebbe essere abbastanza grande da portare a termine il lavoro e non più grande. Questo articolo esamina otto dei framework Python più noti che enfatizzano la semplicità, la consegna leggera e un focus preciso.

Bottiglia

La bottiglia potrebbe essere considerata una sorta di mini-fiaschetta, poiché è ancora più compatta e succinta di quell'altra "microframe". Grazie al suo ingombro minimo, Bottle è ideale per essere incluso in altri progetti o per fornire rapidamente piccoli progetti come le API REST. (Flask è discusso di seguito.) 

L'intera base di codice per Bottle si adatta a un singolo file e non ha assolutamente dipendenze esterne. Anche così, Bottle è dotato di funzionalità sufficienti per creare tipi comuni di app Web senza fare affidamento su un aiuto esterno.

Il sistema di routing in Bottle, che mappa gli URL alle funzioni, ha quasi esattamente la stessa sintassi di Flask. Non sei nemmeno limitato a una serie di percorsi cablati; puoi crearli dinamicamente. Dati di richiesta e risposta, cookie, variabili di query, dati di moduli da un'azione POST, intestazioni HTTP e caricamenti di file possono essere tutti accessibili e manipolati tramite oggetti in Bottle.

Ogni capacità è stata implementata con una buona attenzione ai dettagli. Con i caricamenti di file, ad esempio, non è necessario rinominare il file se la sua convenzione di denominazione è in conflitto con il file system di destinazione (come le barre nel nome su Windows). Bottle può farlo per te.

Bottle include il suo semplice motore di template HTML. Anche in questo caso, sebbene minimo, il motore dei modelli ha tutti gli elementi essenziali. Le variabili incluse in un modello vengono visualizzate con HTML sicuro per impostazione predefinita; devi indicare quali variabili sono sicure da riprodurre letteralmente. Se preferisci sostituire il motore dei modelli di Bottle con uno diverso, come Jinja2, Bottle ti consente di farlo senza problemi. Preferisco il semplice sistema di modelli in bundle con Bottle; è veloce, la sua sintassi è senza pretese e ti consente di mescolare codice e testo del modello senza indebite difficoltà.

Bottle supporta anche più back-end del server. Viene fornito con il proprio miniserver integrato per test rapidi, ma supporterà anche WSGI generico, un'ampia varietà di server HTTP compatibili con WSGI e un semplice vecchio CGI se necessario.

Bottle non ha bisogno di tanta documentazione come altri framework, ma i documenti non sono per niente scarni. Tutte le cose cruciali si inseriscono in una singola pagina web (anche se lunga). Oltre a ciò, troverai la documentazione completa per ciascuna API, esempi per la distribuzione su varie infrastrutture, una spiegazione del linguaggio di creazione dei modelli integrato e una serie di ricette comuni.

Come con Flask, puoi espandere le funzionalità di Bottle manualmente o tramite plug-in. I plug-in delle bottiglie non sono neanche lontanamente numerosi come quelli di Flask, ma ci sono parti utili, come l'integrazione con vari livelli di database e l'autenticazione utente di base. Per il supporto asincrono, Bottle può utilizzare uno degli adattatori server esistenti che viene eseguito in modo asincrono, ad esempio aiohttp / uvloop, ma async/awaitnon è supportato in modo nativo.

Una conseguenza del minimalismo di Bottle è che alcuni oggetti semplicemente non ci sono. La convalida dei moduli, incluse funzionalità come la protezione CSRF (cross-site request forgery), non è inclusa. Se desideri creare un'applicazione web che supporti un alto grado di interazione con l'utente, dovrai aggiungere tu stesso quel supporto.

Un altro problema con Bottle è che lo sviluppo si è bloccato; l'ultimo rilascio minore, 0.12, è arrivato nel 2013. Detto questo, Bottle continua a essere mantenuto e le sue versioni di sviluppo rimangono utilizzabili per la produzione. Gli sviluppatori intendono fornire nuove versioni che perdano il supporto per le edizioni legacy di Python.

CherryPy

CherryPy esiste in una forma o nell'altra da quasi 20 anni, ma non ha perso il minimalismo e l'eleganza che lo hanno contraddistinto sin dall'inizio.

L'obiettivo dietro CherryPy, oltre a contenere solo i bit necessari per servire le pagine web, è di sentirsi, per quanto possibile, non come un "framework web" ma come qualsiasi altro tipo di applicazione Python. Siti come Hulu e Netflix hanno utilizzato CherryPy in produzione perché il framework fornisce una base molto discreta su cui costruire. CherryPy utilizza thread in pool sotto il cofano, per supportare meglio gli adattatori server multithread.

CherryPy ti consente di mantenere la tua applicazione web separata dalla logica di base. Per mappare le funzioni della tua applicazione a URL o rotte servite da CherryPy, crei una classe in cui gli spazi dei nomi degli oggetti mappano direttamente agli URL che desideri servire. Ad esempio, la radice del sito Web è fornita da una funzione denominata "index". I parametri passati a tali funzioni vengono utilizzati per gestire le variabili fornite dai metodi GET o POST.

I bit inclusi in CherryPy sono pensati per funzionare come elementi costitutivi di basso livello. Gli identificatori di sessione e la gestione dei cookie sono inclusi, ma i modelli HTML non lo sono. Come Bottle, CherryPy offre un modo per mappare le rotte alle directory su disco per il servizio di file statici.

CherryPy spesso rimanda a una libreria di terze parti esistente per supportare una funzionalità piuttosto che fornirla in modo nativo. Le applicazioni WebSocket, ad esempio, non sono supportate direttamente da CherryPy, ma tramite la libreria ws4py.

La documentazione per CherryPy include un pratico tutorial che illustra i vari aspetti del programma. Non ti guiderà attraverso un'applicazione end-to-end completa, a differenza di altri tutorial sul framework, ma è comunque utile. La documentazione contiene note utili sulla distribuzione negli host virtuali, il proxy inverso tramite Apache e Nginx e molti altri scenari.

Falco

Se stai creando API basate su REST e nient'altro, Falcon è stato creato apposta per te. Snello e veloce, quasi senza dipendenze oltre alla libreria standard, Falcon fornisce tutto il necessario per le API REST e nient'altro. Falcon 2.0, rilasciato nel 2019, elimina il supporto di Python 2.x e richiede almeno Python 3.5.

Gran parte del motivo per cui Falcon si guadagna l'etichetta "leggera e sottile" ha poco a che fare con il numero di righe di codice nel framework. È perché Falcon non impone quasi nessuna struttura propria alle applicazioni. Tutto ciò che un'applicazione Falcon deve fare è indicare quali funzioni sono mappate a quali endpoint API. La restituzione di JSON da un endpoint implica poco più che l'impostazione di una rotta e la restituzione dei dati tramite la json.dumpsfunzione dalla libreria standard di Python. Il supporto per async non è ancora arrivato in Falcon, ma sono in corso lavori per farlo accadere in Falcon 3.0.

Falcon utilizza anche impostazioni predefinite sane, quindi è necessario poco armeggiare per l'installazione. Ad esempio, i 404 vengono generati per impostazione predefinita per qualsiasi route non dichiarata esplicitamente. Se desideri restituire gli errori al cliente, puoi sollevare una delle numerose eccezioni di stock in bundle con il framework (come HTTPBadRequest) o utilizzare falcon.HTTPErrorun'eccezione generica . Se hai bisogno di pre-elaborazione o post-elaborazione per una rotta, Falcon fornisce anche gli hook per quelli.

L'attenzione di Falcon sulle API significa che qui c'è poco per la creazione di app Web con interfacce utente HTML convenzionali. Non aspettarti molto in termini di funzioni di elaborazione dei moduli e strumenti di protezione CSRF, ad esempio. Detto questo, Falcon offre opzioni eleganti per estenderne le funzionalità, in modo da poter costruire oggetti più sofisticati. A parte il suddetto meccanismo di aggancio, troverai un'interfaccia per la creazione di middleware che può essere utilizzato per avvolgere tutte le API di Falcon.

La documentazione per Falcon è snella rispetto ad altri framework, ma solo perché c'è meno da coprire. La guida per l'utente include una procedura dettagliata formale di tutte le principali funzionalità, insieme a una sezione di avvio rapido che consente di visualizzare il codice di esempio con o senza annotazione.

FastAPI

Il nome di FastAPI è una buona sintesi di ciò che fa. È progettato per creare rapidamente endpoint API e funziona anche velocemente.

FastAPI fa uso del progetto Starlette per il suo nucleo di rete ad alta velocità, ma non è necessario conoscere gli interni di Starlette per utilizzare FastAPI. Gli endpoint vengono definiti più o meno allo stesso modo di un'app Flask o Bottle: utilizza i decoratori per indicare quali funzioni gestiscono i percorsi e quindi restituisci i dizionari tradotti automaticamente in JSON.

Puoi facilmente ignorare il modo in cui le cose vengono restituite. Ad esempio, se desideri restituire HTML / XML da alcuni endpoint, puoi farlo semplicemente restituendo un Responseoggetto personalizzato . Se desideri aggiungere middleware personalizzato, puoi inserire tutto ciò che segue lo standard ASGI. 

FastAPI utilizza i suggerimenti sul tipo di Python per fornire vincoli sui tipi di dati accettati dalle rotte. Ad esempio, se si dispone di una route con il tipo Optional[int], FastAPI rifiuterà qualsiasi invio ad eccezione degli interi. Non è necessario aggiungere il codice di convalida dei dati agli endpoint; puoi semplicemente usare i suggerimenti sul tipo e lasciare che FastAPI faccia il lavoro.

Naturalmente, alcune cose vengono tralasciate. Ad esempio, non esiste un motore di modelli HTML nativo, ma non mancano soluzioni di terze parti per colmare questa lacuna. Lo stesso con la connettività del database, ma la documentazione contiene dettagli su come convincere determinati ORM (ad esempio Peewee) a lavorare con i comportamenti asincroni di FastAPI.

Borraccia

Molte discussioni sui framework web Python iniziano con Flask e per una buona ragione. Flask è un framework ben consolidato e ben compreso, facile da usare e abbastanza stabile. È quasi impossibile sbagliare usando Flask per un progetto web leggero o un'API REST di base, ma dovrai affrontare un lavoro pesante se provi a costruire qualcosa di più grande.

L'attrattiva centrale di Flask è la sua bassa barriera all'ingresso. Un'app di base "ciao mondo" può essere configurata in meno di 10 righe di Python. Flask include un sistema di template HTML ampiamente utilizzato, Jinja2, per rendere facile il rendering del testo, ma Jinja2 può essere sostituito da un numero qualsiasi di altri motori di template (come Moustache) oppure puoi lanciarne uno tuo.

In nome della semplicità, Flask omette sottigliezze come un livello dati o ORM e non offre disposizioni per simili alla convalida dei moduli. Tuttavia, Flask può essere espanso tramite estensioni, di cui esistono dozzine, che coprono molti casi d'uso comuni come la memorizzazione nella cache, la gestione e la convalida di moduli e la connettività del database. Questo design snello per impostazione predefinita consente di iniziare a progettare un'applicazione Flask con il minimo assoluto di funzionalità, quindi sovrapporre solo i pezzi di cui hai bisogno quando ne hai bisogno.

La documentazione di Flask è geniale e di facile lettura. Il documento di avvio rapido fa un ottimo lavoro per iniziare mentre spiega anche il significato delle scelte predefinite per una semplice applicazione Flask e i documenti API sono pieni di buoni esempi. Eccellente anche la raccolta di frammenti di Flash, che sono esempi rapidi e sporchi di come eseguire attività specifiche, come come restituire un oggetto se esiste o un errore 404 in caso contrario.

Flask ha raggiunto la sua pietra miliare 1.0 nel 2018, con Python 2.6 e Python 3.3 come versioni minime supportate e con molti dei suoi comportamenti finalmente fissati nella pietra. Flask non supporta esplicitamente la sintassi asincrona di Python, ma una variante di Flask compatibile con l'API chiamata Quart è stata scorporata per soddisfare tale richiesta.

Piramide

Piccolo e leggero, Pyramid è adatto per attività come l'esposizione di codice Python esistente come API REST o per fornire il nucleo di un progetto web in cui lo sviluppatore fa la maggior parte del lavoro pesante.

"Pyramid ti consentirà di diventare produttivo rapidamente e crescerà con te", afferma la documentazione. "Non ti tratterrà quando la tua applicazione è piccola e non ti ostacolerà quando la tua applicazione diventa grande."

Un buon modo per descrivere il minimalismo di Pyramid sarebbe "privo di policy", un termine usato nella sezione della documentazione che discute come Pyramid si modella rispetto ad altri framework web. Fondamentalmente, "privo di criteri" significa ciò che il database o il linguaggio di template che scegli di utilizzare non è di competenza di Pyramid.

È necessario pochissimo lavoro per creare un'applicazione Pyramid di base. Come con Bottle e Flask, un'applicazione Pyramid può essere costituita da un singolo file Python, a parte i file per il framework stesso. Una semplice API one-route non richiede più di una dozzina di righe di codice. La maggior parte di queste sono from … importistruzioni tipo boilerplate e configurazione del server WSGI.

Per impostazione predefinita, Pyramid include diversi elementi comuni nelle app Web, ma vengono forniti come componenti da unire insieme, non come soluzioni complete. Il supporto per le sessioni utente, ad esempio, viene fornito anche con la protezione CSRF. Ma il supporto per gli account utente, come gli accessi o la gestione degli account, non fa parte dell'accordo. Dovrai arrotolarlo da solo o aggiungerlo tramite un plug-in. Lo stesso vale per la gestione dei moduli e le connessioni al database.

Pyramid fornisce anche un modo per creare modelli da precedenti progetti Pyramid per riutilizzare il lavoro precedente. Questi modelli, chiamati "scaffold", generano un'app Pyramid con instradamento semplice e alcuni modelli HTML / CSS iniziali. Gli scaffold in bundle includono un progetto iniziale di esempio e un progetto che si connette a database tramite la popolare libreria Python SQLAlchemy.