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.

Scarica chapter21.py

Obiettivi

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

  1. Crea un’app “to-do” in Flask con aggiunta/rimozione di task in memoria.
  2. Scrivi un endpoint FastAPI che valida un payload JSON di dati utente.
  3. Usa l’ereditarietà dei template Jinja2 per costruire un layout comune nelle pagine Flask.
  4. Containerizza la tua app Flask/FastAPI con Docker ed eseguila localmente.