Capitolo 21: Sviluppo Web con Flask & FastAPI
Impara a creare applicazioni web e API RESTful usando Flask e FastAPI, dal routing alla templating fino al deployment.
Scaricachapter21.py
Obiettivi
- Configurare un’app Flask di base: route, view, template.
- Gestire metodi HTTP, parametri di query e dati di form.
- Costruire API REST con FastAPI: parametri path e body, validazione.
- Usare Jinja2 per template HTML dinamici.
- Distribuire un’app Flask/FastAPI con Uvicorn o Gunicorn.
1. Nozioni di base su Flask
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, Flask!"
@app.route("/greet/<name>")
def greet(name):
return f"Benvenuto, {name}!"
@app.route("/submit", methods=["GET","POST"])
def submit():
if request.method == "POST":
data = request.form.get("data")
return render_template("result.html", data=data)
return render_template("form.html")
if __name__ == "__main__":
app.run(debug=True)
Struttura della cartella dei template:
templates/
├── form.html
└── result.html
Esempio di form.html
:
<form method="post">
<input name="data" />
<button>Invia</button>
</form>
Esempio di result.html
:
<p>Hai inviato: {{ data }}</p>
2. Nozioni di base su FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
def create_item(item: Item):
return {"message": "Creato", "item": item}
# esegui con: uvicorn src.chapter21:app --reload
3. Deployment
# Gunicorn per Flask
gunicorn --bind 0.0.0.0:8000 wsgi:app
# Uvicorn per FastAPI
uvicorn src.chapter21:app --host 0.0.0.0 --port 8000
Esercizi
- Crea un’app “to-do” in Flask con aggiunta/rimozione di task in memoria.
- Scrivi un endpoint FastAPI che valida un payload JSON di dati utente.
- Usa l’ereditarietà dei template Jinja2 per costruire un layout comune nelle pagine Flask.
- Containerizza la tua app Flask/FastAPI con Docker ed eseguila localmente.