Flask: tutto quello che c’è da sapere sul micro-framework
Flask è un framework web particolarmente leggero, interessante sia per chi è agli inizi sia per i professionisti. Si limita all’essenziale e consente l’implementazione di librerie esterne.
Python e i framework web
Python è un popolare linguaggio di programmazione web che favorisce l’uso di codici semplici e brevi. Lo stile di programmazione pulito riduce al minimo gli errori e fa sì che gli utenti possano comprendere rapidamente anche un tutorial su Python. Sviluppato da Guido van Rossum nel 1991, questo linguaggio è oggi utilizzato e mantenuto da un’ampia comunità sotto la supervisione dell’associazione no-profit Python Software Foundation. Il linguaggio è dinamico, open source e multipiattaforma. Inoltre, supporta la programmazione funzionale e orientata agli oggetti, oltre che il logging, e può essere eseguito come script CGI.
Sono disponibili diversi framework web che permettono di utilizzare Python per creare siti web dinamici e sviluppare applicazioni web. Questi forniscono il codice necessario per facilitare il processo di sviluppo e semplificare le operazioni ripetute. Gli errori o i problemi di Python possono essere così evitati e i servizi web diventano operativi più velocemente e in modo più sicuro. Le funzioni più richieste possono essere adottate direttamente senza la necessità di una programmazione indipendente. Uno dei framework web più noti per Python è il CMS Django, una soluzione full-stack che offre una vasta gamma di funzioni diverse, come emerge dal confronto tra Flask e Django. Tuttavia, a causa delle sue dimensioni, questo framework è anche relativamente rigido. Una delle controparti più note è Flask.
Cos’è Flask?
Mentre framework full-stack come Django forniscono le proprie librerie agli sviluppatori e alle sviluppatrici, Flask per Python adotta un approccio diverso. Il framework web, presentato dallo sviluppatore austriaco Armin Ronacher nel 2010, adotta un approccio più minimalista. Include solo il template engine Jinja e una libreria chiamata “Werkzeug”. Tuttavia, questo framework offre la possibilità di integrare funzioni di terze parti. È fornito con licenza BSD, è libero e open source. Ideato come controproposta a Django e ad altri framework, Flask per Python ha rapidamente ispirato una grande community di fan.
Configurazione di Flask in Python e le sue applicazioni web: tutorial
Prima di configurare Flask per Python, assicurati di soddisfare i requisiti. Avrai bisogno di avere Python installato. Ti servirà anche un editor di testo o un IDE e l’accesso a internet. È utile inoltre avere una conoscenza di base su Python. Anche la comprensione della programmazione, dei tipi di dati e dei cicli for è un vantaggio. Flask è un buon punto di partenza per imparare a costruire applicazioni web. Il framework si configura come segue:
- Crea un ambiente virtuale per separare il nuovo progetto dal resto delle librerie o dei progetti Python ed evitare problemi al sistema. Il codice si presenta così:
$ python -m venv newproject- Installa Flask. Il modo migliore per farlo è usare il programma di gestione dei pacchetti pip. Il comando appropriato è:
$ pip install flask- Verifica che l’installazione sia avvenuta con successo:
python -c "import flask; print(flask.__version__)"- Ora puoi testare Flask e creare un’applicazione di base. Per farlo, apri un file nella tua cartella. In questo esempio lo abbiamo denominato start.py e usiamo nano per accedervi:
$ nano start.py- Scrivi il seguente codice nel file:
from flask import Flask
app = Flask(__name__)
@app.route ( "/" )
def test ( ):
return "Questo è un test"-
Salva e chiudi il file.
-
Usa la variabile d’ambiente FLASK_APP per indicare a Flask la posizione del file corrispondente:
$ export FLASK_APP=start- Usa FLASK_ENV per esportare il file in modalità di sviluppo:
$ export FLASK_ENV=development- Ora esegui l’applicazione:
$ flask runIl risultato dovrebbe essere simile a quanto segue:
Output
- Serving Flask app "start" (lazy loading)
- Environment: development
- Debug mode: on
- Running on [IP address]/ (Press CTRL+C to quit)
- Restarting with stat
- Debugger is active!
- Debugger PIN [PIN]Vantaggi e svantaggi di Flask Python
Vi sono buone ragioni per utilizzare Flask. Tuttavia, alcuni aspetti possono essere sfavorevoli. Per questo motivo, conviene esaminare più da vicino i pro e i contro di questo framework web.
Vantaggi
✓ Ambito di applicazione: è difficile trovare un framework più leggero di Flask per Python. Infatti, è veloce da installare e facile da usare. ✓ Flessibilità: Flask offre una flessibilità eccezionale. Potrai risolvere i problemi e implementare le librerie di cui hai bisogno, affrontando ogni progetto individualmente. ✓ Apprendimento: Flask è facile da imparare anche solo seguendo un tutorial apposito. Il framework è volutamente semplice, ma può essere utilizzato anche per progetti impegnativi. Pertanto, è un’ottima scelta sia per chi è agli inizi che per i professionisti che lavorano a progetti più complessi. ✓ Open source: il framework Flask è open source e disponibile gratuitamente. Provalo e scopri se è lo strumento giusto per le tue esigenze. ✓ Community: Flask è supportato da una vasta community che fornisce consigli e supporto ai nuovi arrivati e agli sviluppatori e alle sviluppatrici più esperte. Le domande e gli errori vengono quindi risolti rapidamente.
Svantaggi
✗ Ambito di applicazione: a seconda dell’uso che se ne intende fare, la sua portata minimalista può essere svantaggiosa. Tutti gli strumenti richiedono un’installazione individuale. I framework alternativi offrono un numero significativamente maggiore di funzioni preinstallate. ✗ Dipendenza da fornitori di terze parti: l’uso di librerie esterne è sempre una possibile fonte di errori, ma Flask dipende da esse. ✗ Responsabilità: mentre altri framework vengono mantenuti automaticamente, Flask lascia questa responsabilità all’utente. Ciò implica un maggior controllo, ma anche più lavoro.
Esempio di Hello World: routing, template e API
Per capire meglio il funzionamento di base di Flask, segue un piccolo esempio che illustra i principali concetti fondamentali del framework web. A tal fine, creiamo una semplice applicazione web che mostra come routing, template e un’API REST funzionano insieme. L’esempio è composto da due file:
app.py: qui si trova il nostro codice Python.templates/hello.html: questo file è un template Jinja2 per visualizzare il sito web in modo dinamico.
Il file app.py si presenta come segue:
from flask import Flask, jsonify, render_template, request
app = Flask(__name__)
@app.route("/")
def home():
return "Hello World!"
@app.route("/greet/<name>")
def greet(name):
return render_template("hello.html", name=name)
@app.route("/api/square", methods=["GET"])
def square():
number = request.args.get("number", default=0, type=int)
result = number ** 2
return jsonify({"number": number, "square": result})
if __name__ == "__main__":
app.run(debug=True)pythonQuesto è il file hello.html, che funge da template:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Saluto di benvenuto</title>
</head>
<body>
<h1>Ciao, {{ name }}!</h1>
<p>benvenuto su Flask con il template Jinja2.</p>
</body>
</html>htmlCon @app.route definiamo +diversi endpoint. Si tratta di URL, a cui il server può rispondere. La pagina iniziale (“/”) mostra semplicemente il testo “Hello World!”. Tramite un percorso dinamico (“/greet/<name>”) possiamo visualizzare un saluto personalizzato. Il nome viene ricavato dall’URL e passato al nostro template Jinja2, che lo inserisce in HTML (vedi il codice in templates/hello.html).
Inoltre, ti mostriamo come creare una piccola API REST: sull’endpoint “/api/square” l’utente può passare un numero come parametro URL e l’app restituisce il quadrato del numero come risposta JSON. Vediamo quindi che Flask può gestire sia siti web classici sia endpoint API. Anche i contenuti dinamici si possono integrare facilmente in HTML grazie ai template, senza dover modificare manualmente la pagina.
Naturalmente, questo codice è solo un esempio minimale nell’ambito di un tutorial su Flask. Serve soprattutto a chiarire i concetti di base. In un’applicazione reale andrebbero inoltre considerati aspetti come la gestione degli errori, la sicurezza, la validazione dei dati e una struttura di progetto pulita, affinché l’app rimanga stabile, affidabile e manutenibile.
Estensioni di Flask
Poiché Flask è pensato in modo molto minimalista, molte funzionalità utili come la connessione al database, l’autenticazione o la validazione dei moduli non sono integrate. Per aggiungere queste funzioni, si utilizzano le estensioni di Flask, sviluppate e mantenute dalla community. Si integrano facilmente in un’applicazione Flask ed estendono in modo significativo le funzionalità, senza dover adattare il framework stesso. In questo modo, le sviluppatrici e gli sviluppatori possono selezionare in modo mirato i componenti di cui hanno davvero bisogno e costruire la propria app in modo modulare. Le estensioni di norma seguono lo stesso schema di Flask e sono ben documentate.
Alcuni esempi di importanti estensioni Flask sono:
- Flask-SQLAlchemy: un’estensione per la connessione al database. Integra il popolare ORM SQLAlchemy in Flask e consente di lavorare facilmente con i database tramite classi Python.
- Flask-WTF: questa estensione supporta la creazione e la validazione di moduli web. Offre funzionalità di sicurezza come la protezione CSRF e facilita la gestione degli input degli utenti.
- Flask-Login: come suggerisce il nome, Flask-Login si occupa della gestione semplificata degli utenti e dell’autenticazione. L’estensione gestisce lo stato di accesso, le sessioni e la protezione degli accessi a determinati percorsi.
- Flask-Migrate: con Flask-Migrate ottieni funzionalità di migrazione del database, che gestiscono automaticamente le modifiche alla struttura del database. Ben si adatta a essere utilizzato in combinazione con Flask-SQLAlchemy per consentire aggiornamenti strutturati.
- Flask-RESTful: questa estensione serve a semplificare la creazione di API REST. Mette a disposizione in modo standardizzato risorse, percorsi e metodi HTTP come GET, POST, PUT o DELETE.
Struttura del progetto e migliori pratiche
Nei progetti Flask è consigliabile scegliere fin dall’inizio un’organizzazione del progetto chiara e strutturata. Anche se le piccole app possono funzionare tecnicamente in un unico file, una struttura pulita facilita notevolmente la manutenzione e l’estensione dell’applicazione.
Tipicamente, per progetti più grandi si creano directory come templates per i file HTML, static per CSS, JavaScript e immagini, nonché app o src per i moduli Python. All’interno della cartella dell’app possono nascere sottocartelle per blueprint, modelli, moduli e servizi, in modo da separare logicamente le funzioni. I blueprint consentono di strutturare in modo modulare i vari componenti dell’app, ad esempio la gestione utenti o un blog.
Le migliori pratiche consigliano inoltre di proteggere i valori di configurazione, come gli URL del database o le chiavi segrete, in un file config.py separato oppure tramite variabili d’ambiente. Un logging continuo aiuta a individuare gli errori in anticipo e a ricostruire il comportamento dell’app. È inoltre utile utilizzare ambienti virtuali per gestire in modo ordinato le dipendenze. Anche il controllo di versione con Git rientra tra le pratiche standard per rendere tracciabili le modifiche.
MyWebsite Now Starter è lo strumento pensato per i principianti che vogliono creare un sito web in modo intuitivo. Include dominio e indirizzo e-mail.
Flask: sicurezza e test
Sicurezza e test non sono extra opzionali, ma componenti centrali di un’applicazione Flask professionale, motivo per cui non dovrebbero mai essere trascurati in nessun tutorial su Flask. Chi fin dall’inizio presta attenzione a crittografia, validazione degli input, configurazioni sicure e test automatizzati sviluppa applicazioni web stabili e sicure, che in seguito si possono estendere senza problemi.
Sicurezza in Flask
A causa della struttura minimalista di Flask, la responsabilità della sicurezza dell’applicazione ricade sulle sviluppatrici e sugli sviluppatori. Una protezione di base consiste nell’utilizzo della protezione CSRF per i moduli, soprattutto in presenza di input degli utenti. A questo scopo, l’estensione Flask-WTF offre meccanismi collaudati.
Le password non dovrebbero mai essere salvate in chiaro, ma sempre cifrate o con hashing. A questo scopo sono adatte, ad esempio, le librerie werkzeug.security o bcrypt. Altrettanto importante è la validazione dell’input, per prevenire le iniezioni SQL, gli attacchi XSS o altre manipolazioni.
Per le sessioni e i cookie dovresti impostare i flag HttpOnly e Secure per proteggere i dati sensibili. Le configurazioni come URL del database o chiavi API dovrebbero essere gestite tramite variabili d’ambiente o file di configurazione separati, invece che direttamente nel codice.
Test su Flask
Come in qualsiasi applicazione programmata, anche su Flask i test sono fondamentali per garantire la stabilità dell’applicazione. Con i cosiddetti test unitari vengono verificate singole funzioni in modo isolato, mentre i test di integrazione verificano l’interazione tra più componenti.
Flask offre a questo scopo un sistema di test client integrato che consente di simulare richieste HTTP senza avviare realmente il server. In questo modo si possono verificare automaticamente percorsi, template ed endpoint API. È particolarmente importante scrivere regolarmente casi di test, soprattutto per le nuove funzionalità, per evitare regressioni. In combinazione con l’integrazione continua si garantisce che l’app resti affidabile anche in caso di modifiche.

