Lezione 2: Il Pattern Model-View-Template (MVT) – Come MVC, Ma Con Più Magia e Meno Mal di Testa


Lesson2

Lezione 2: Il Pattern Model-View-Template (MVT) – Come MVC, Ma Con Più Magia e Meno Mal di Testa

Benvenuti di nuovo, apprendisti stregoni del codice! 🧙‍♂️ Se siete arrivati fino a qui, complimenti—avete superato la Lezione 1 (speriamo senza lanciare la tastiera fuori dalla finestra). Ora è il momento di scoprire il vero potere di Django: il pattern Model-View-Template (MVT). È come MVC, ma con meno mal di testa e molta più magia.

Oggi ci addentriamo in un’avventura mistica: creeremo il tuo primo modello per i post del blog. Entro la fine di questa lezione, piegherai i dati alla tua volontà come un vero mago del codice. 🪄


Passo 1: Attivare l’Ambiente Virtuale (alias Entrare nel Covolo del Mago)

Prima di lanciare incantesimi (alias eseguire comandi Django), dobbiamo entrare nel nostro covolo virtuale—il nostro virtual environment. Se non l’hai ancora attivato, apri il terminale, vai nella cartella del progetto e lancia questo incantesimo:

source venv/bin/activate

Quando vedrai (venv) all’inizio della riga del terminale, saprai che sei entrato nella tua bolla magica. È come Hogwarts, ma con più Python e meno gufi.


Passo 2: Creare l’App del Blog (Ogni Mago Ha Bisogno del Suo Laboratorio)

Ora che hai varcato le porte del tuo laboratorio magico, è il momento di creare l’app del blog. Pensa a questa app come al tuo laboratorio alchemico, dove tutti i tuoi incantesimi di blogging prenderanno forma. Esegui questo comando per crearla:

python3 manage.py startapp blog

Django farà la magia e creerà una directory blog, dove vivranno tutti gli ingredienti—modelli, viste, template. È come ricevere un nuovo grimorio, ma senza il rischio di trasformarsi in un rospo.

La struttura del progetto sarà simile a questa:

myblog/
    blog/
        migrations/
        __init__.py
        admin.py
        apps.py
        models.py     # <-- Qui definiremo il modello BlogPost
        views.py
        ...
    myblog/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    manage.py

Passo 3: Registrare l’App in settings.py (Facciamolo Ufficiale)

Ora che la tua app blog esiste, dobbiamo dirlo a Django. Apri il file settings.py del progetto e aggiungi 'blog' alla lista INSTALLED_APPS:

INSTALLED_APPS = [
    # Altre app installate...
    'blog',
]

Ora la tua app blog fa ufficialmente parte del club di Django. È come iscriversi a Hogwarts, ma senza le punizioni.


Passo 4: Creare il Modello BlogPost (Tempo di Fare Magia)

Ora arriva il bello! Creeremo il nostro primo modello, che rappresenterà tutti i post del blog che scriverai. Nei modelli di Django, i dati prendono forma—pensa a loro come ai rotoli di pergamena magica per il tuo database.

Apri il file models.py nella directory blog e aggiungi il seguente codice:

from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.title

Che Cosa Succede Qui?

  • title: Un campo di testo per il titolo del post. Massima lunghezza 200 caratteri (perché, ammettiamolo, titoli troppo lunghi sono solo per fare i fighi).
  • content: Il corpo del post. Qui avverrà tutta la magia (o il tuo flusso di coscienza più libero).
  • created_at: Un timestamp che registra quando il post è stato creato. Non ti preoccupare, Django farà tutto per te come un elfo domestico invisibile.
  • __str__: Questo metodo assicura che Django mostri qualcosa di utile quando fa riferimento a un post. Qui mostrerà il titolo, perché “Post Senza Titolo #42” non ha lo stesso fascino.

Passo 5: Creare e Applicare le Migrazioni (Informiamo il Database)

Ora che abbiamo definito il nostro modello BlogPost, dobbiamo informare il database. Ecco dove entrano in gioco le migrazioni. Le migrazioni sono come pergamene magiche che dicono al database cosa fare.

  1. Prima di tutto, esegui questo comando per creare il file di migrazione:
python3 manage.py makemigrations

Django risponderà con qualcosa del tipo: “Migrations for ‘blog’: 0001_initial.py”—che in linguaggio Django significa: “Ok, ho capito cosa vuoi fare”.

  1. Ora applichiamo la migrazione al database:
python3 manage.py migrate

Et voilà! Il tuo database ora ha una tabella pronta per ospitare i tuoi post. Se ascolti attentamente, potresti quasi sentire il sussurro: “Sono pronto per la tua saggezza (o per le foto dei gatti).”


Passo 6: Usare l’Admin di Django per Gestire i Post (Pronti a Giocare con i Grandi)

Uno degli strumenti più potenti di Django è il pannello admin. È praticamente una sala di controllo dove puoi gestire i tuoi post come un mago che maneggia centinaia di pergamene.

Ma prima dobbiamo registrare il modello BlogPost nel pannello admin. Apri admin.py nella directory blog e aggiungi questo codice:

from django.contrib import admin
from .models import BlogPost

admin.site.register(BlogPost)

Ora, avvia il server:

python3 manage.py runserver

Vai su http://127.0.0.1:8000/admin/ e ammira la magia. Se non hai ancora creato un superuser (l’account da amministratore supremo), fallo adesso:

python3 manage.py createsuperuser

Django ti chiederà un nome utente, una email e una password. Non preoccuparti, non serve una password magica, basta che sia sicura (tipo “passwordSicura123”, ma magari un po’ meglio).

Una volta effettuato l’accesso, vedrai il modello BlogPost pronto per essere gestito. Puoi creare, modificare e cancellare post con pochi clic—senza bisogno di bacchette magiche.


Passo 7: Mostrare i Post nel Front-End (Perché Che Senso Ha la Magia Se Nessuno La Vede?)

Grande! Abbiamo creato i post e li gestiamo dall’admin, ma ora vogliamo mostrarli sul sito. Perché che senso ha un blog se non mostra i tuoi capolavori (o almeno qualcosa che tua madre possa leggere)?

  1. Aggiungi una Vista: Apri views.py nella directory blog e crea una vista che recuperi tutti i post dal database e li invii a un template:
from django.shortcuts import render
from .models import BlogPost

def blog_index(request):
    posts = BlogPost.objects.all().order_by('-created_at')
    return render(request, 'blog_index.html', {'posts': posts})
  1. Crea un Template: Nella directory blog, crea una cartella chiamata templates (se non esiste già). Poi crea un file chiamato blog_index.html:
<!DOCTYPE html>
<html>
<head>
    <title>Il Mio Blog</title>
</head>
<body>
    <h1>Benvenuti nel Mio Blog!</h1>
    <ul>
        {% for post in posts %}
        <li><strong>{{ post.title }}</strong> - {{ post.created_at }}</li>
        <p>{{ post.content }}</p>
        {% endfor %}
    </ul>
</body>
</html>

Questo template mostrerà tutti i post con il titolo, la data di creazione e il contenuto. Quando visiterai l’URL del blog, i tuoi post saranno finalmente visibili al mondo (o almeno a chiunque voglia leggerli).


Passo 8: Configurare urls.py (La Via Magica)

Ora, colleghiamo la nostra nuova vista del blog al progetto Django. Dobbiamo creare una rotta URL per far sapere a Django cosa mostrare quando qualcuno visita un indirizzo specifico (tipo /blog).

  1. Crea urls.py per l’App Blog: Nella directory blog, crea un nuovo file chiamato urls.py e aggiungi il seguente codice:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.blog_index, name='blog_index'),
]
  1. Includi gli URL del Blog nel urls.py Principale: Per fare in modo che Django riconosca gli URL del blog, dobbiamo includerli nel file urls.py principale, che si trova nella directory myblog. Apri il file urls.py e modifica il codice così:
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # Aggiungi questa riga per includere gli URL del blog
]

Questo dice a Django di includere tutti gli URL dell’app blog quando qualcuno visita l’indirizzo /blog/.


Conclusione della Lezione 2

Fantastico! 🎉 Hai creato la tua prima app Django, definito un modello per i post del blog, configurato le rotte URL e visualizzato i post nel front-end. Ormai sei un vero mago di Django. 🧙‍♂️

La prossima volta, faremo un ulteriore passo in avanti aggiungendo form—perché che senso ha un blog se non permetti alle persone (o ai bot) di inviarti messaggi casuali e commenti? Fino ad allora, prenditi un momento per ammirare il tuo lavoro (e magari concediti un cioccolatino. Te lo sei guadagnato!).


Vedi anche