×

Guida completa a Python

Guida completa a Python

Capitolo 16 – Progetti Pratici per esercitarti: Livello AVANZATO

ProgettoCosa impari
🌐 Mini sito web con FlaskHTML, routing, form, rendering
📈 Dashboard dati CSVFlask + pandas + matplotlib
🧠 Previsione prezzo (ML base)scikit-learn, regressione
📦 Gestione inventarioCRUD completo con salvataggio (file o DB)
👨‍💼 Login + area privata in Flaskgestione utenti, sessioni, sicurezza base

1. Mini sito web con Flask

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def home():
return "<h1>🌐 Benvenuto nella mia prima web app Flask!</h1>"

@app.route("/about")
def about():
return "<p>Questa è una semplice pagina about.</p>"

if __name__ == "__main__":
app.run(debug=True)

📍 Naviga su http://127.0.0.1:5000 dopo averlo lanciato con python app.py

2. Dashboard dati CSV (Flask + Pandas + Matplotlib)

from flask import Flask, render_template_string
import pandas as pd
import matplotlib.pyplot as plt
import io
import base64

app = Flask(__name__)

@app.route("/")
def dashboard():
df = pd.read_csv("studenti.csv")

# crea grafico
plt.figure()
df.plot(x="Nome", y="Voti", kind="bar", legend=False)
plt.title("Voti degli studenti")
plt.tight_layout()

img = io.BytesIO()
plt.savefig(img, format="png")
img.seek(0)
grafico_url = base64.b64encode(img.getvalue()).decode()

html = '''
<h1>📊 Dashboard Studenti</h1>
<img src="data:image/png;base64,{{ grafico_url }}">
'''
return render_template_string(html, grafico_url=grafico_url)

if __name__ == "__main__":
app.run(debug=True)

📌 Usa un file studenti.csv con:

CopiaModificaNome,Voti
Anna,30
Luca,25
Marco,28

3. Previsione prezzi (ML base con scikit-learn)

import pandas as pd
from sklearn.linear_model import LinearRegression

# Dataset esempio
dati = {
"Giorni": [1, 2, 3, 4, 5],
"Prezzo": [10, 12, 15, 18, 20]
}
df = pd.DataFrame(dati)

# Modello
X = df[["Giorni"]]
y = df["Prezzo"]

model = LinearRegression()
model.fit(X, y)

giorno = int(input("📅 Inserisci il giorno per la previsione: "))
prezzo_previsto = model.predict([[giorno]])

print(f"💰 Prezzo previsto per il giorno {giorno}: {prezzo_previsto[0]:.2f}€")

4. Gestione inventario (CRUD su file)

import csv
import os

FILE = "inventario.csv"

def carica():
if not os.path.exists(FILE):
return []
with open(FILE, newline="") as f:
return list(csv.DictReader(f))

def salva(dati):
with open(FILE, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["Nome", "Quantità"])
writer.writeheader()
writer.writerows(dati)

def aggiungi():
nome = input("📦 Nome oggetto: ")
quant = input("🔢 Quantità: ")
dati.append({"Nome": nome, "Quantità": quant})
salva(dati)

def mostra():
for item in dati:
print(f"{item['Nome']} - {item['Quantità']} pezzi")

dati = carica()

while True:
print("\nMENU INVENTARIO")
print("1. Aggiungi oggetto")
print("2. Mostra oggetti")
print("3. Esci")
scelta = input("Scelta: ")

if scelta == "1":
aggiungi()
elif scelta == "2":
mostra()
elif scelta == "3":
break

5. Login + area privata (Flask base)

from flask import Flask, render_template_string, request, redirect, url_for

app = Flask(__name__)
USERS = {"admin": "1234"}

@app.route("/", methods=["GET", "POST"])
def login():
if request.method == "POST":
u = request.form["username"]
p = request.form["password"]
if USERS.get(u) == p:
return redirect(url_for("area_privata", user=u))
else:
return "<p>❌ Login fallito</p>"
return '''
<form method="post">
Username: <input name="username"><br>
Password: <input type="password" name="password"><br>
<button type="submit">Login</button>
</form>
'''

@app.route("/area/<user>")
def area_privata(user):
return f"<h1>👋 Benvenuto, {user}!</h1><p>Questa è l'area privata.</p>"

if __name__ == "__main__":
app.run(debug=True)

Pagine: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19