# 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](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/linguaggi-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](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/tutorial-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](https://www.ionos.it/digitalguide/server/know-how/il-concetto-di-open-source/) e multipiattaforma. Inoltre, supporta la programmazione funzionale e orientata agli oggetti, oltre che il [logging](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/python-logging/), e può essere eseguito come script CGI.

Sono disponibili diversi [framework web](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/i-framework-per-applicazioni-web-unintroduzione/) 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](https://www.ionos.it/digitalguide/hosting/cms/tutto-quello-che-ce-da-sapere-sul-cms-django/), una soluzione full-stack che offre una vasta gamma di funzioni diverse, come emerge dal confronto tra [Flask e Django](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/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:

1. 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ì:

```none
$ python -m venv newproject
```

2. Installa Flask. Il modo migliore per farlo è usare il programma di gestione dei pacchetti pip. Il comando appropriato è:

```none
$ pip install flask
```

3. Verifica che l’installazione sia avvenuta con successo:

```none
python -c "import flask; print(flask.__version__)"
```

4. 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:

```none
$ nano start.py
```

5. Scrivi il seguente codice nel file:

```none
from flask import Flask
app = Flask(__name__)
@app.route ( "/" )
def test ( ):
return "Questo è un test"
```

6. Salva e chiudi il file.
7. Usa la variabile d’ambiente FLASK\_APP per indicare a Flask la posizione del file corrispondente:

```none
$ export FLASK_APP=start
```

8. Usa FLASK\_ENV per esportare il file in modalità di sviluppo:

```none
$ export FLASK_ENV=development
```

9. Ora esegui l’applicazione:

```none
$ flask run
```

Il risultato dovrebbe essere simile a quanto segue:

```none
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:

```python
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)
```

Questo è il file `hello.html`, che funge da template:

```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>
<div class="hash d-none" hidden>hash_caeec69c29ce4a890b3a6123873be22c4f717af7</div><script data-shy-copy-guard>(function(){var C=[0x00AD,0x200B,0x200C,0x200D,0x2060,0xFEFF];var s=function(t){for(var i=0;i<C.length;i++){t=t.split(String.fromCharCode(C[i])).join("");}return t;};document.addEventListener("copy",function(e){var sel=document.getSelection();if(!sel||sel.isCollapsed||!e.clipboardData){return;}e.clipboardData.setData("text/plain",s(sel.toString()));try{var d=document.createElement("div");d.appendChild(sel.getRangeAt(0).cloneContents());e.clipboardData.setData("text/html",s(d.innerHTML));}catch(x){}e.preventDefault();});})();</script></body>
</html>
```

Con `@app.route` definiamo **+diversi endpoint**. Si tratta di [URL](https://www.ionos.it/digitalguide/server/know-how/url-che-cose-uno-uniform-resource-locator/), a cui il server può rispondere. La pagina iniziale (“/”) mostra semplicemente il testo “Hello World!”. Tramite un percorso dinamico (“/greet/&lt;name&gt;”) possiamo visualizzare un saluto personalizzato. Il nome viene ricavato dall’URL e passato al nostro template Jinja2, che lo inserisce in [HTML](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cose-lhtml/) (vedi il codice in `templates/hello.html`).

Inoltre, ti mostriamo come creare una piccola API [REST](https://www.ionos.it/digitalguide/server/know-how/rest-la-soluzione-http-per-servizi-web/): sull’endpoint “/api/square” l’utente può **passare un numero come parametro URL** e l’app restituisce il quadrato del numero come risposta [JSON](https://www.ionos.it/digitalguide/server/know-how/cose-json/). Vediamo quindi che Flask può gestire sia siti web classici sia endpoint [API](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/che-cose-unapi/). Anche i contenuti dinamici si possono integrare facilmente in HTML grazie ai template, senza dover modificare manualmente la pagina.

N.B. 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](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/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](https://www.ionos.it/digitalguide/server/sicurezza/cross-site-request-forgery-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](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/richiesta-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.

## 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](https://www.ionos.it/digitalguide/server/sicurezza/sql-injection-che-cose-e-come-proteggersi/), gli attacchi [XSS](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cose-il-cross-site-scripting-o-xxs/) o altre manipolazioni.

Per le sessioni e i [cookie](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/che-cosa-sono-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](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/continuous-integration/) si garantisce che l’app resti affidabile anche in caso di modifiche.


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/flask/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/flask/) for AI/LLM consumption.