Lezione 4: Autenticazione Utenti – Perché Non Tutti Dovrebbero Accedere al Santuario Segreto del Tuo Blog
Ciao di nuovo, maghi del codice! 🧙♂️ Ormai avete creato un blog, abilitato i commenti e magari ricevuto feedback tipo “Bella scelta di font” (o “Perché Comic Sans?”). Ma oggi faremo un salto di qualità, perché non tutti dovrebbero avere accesso al santuario segreto del tuo blog.
Oggi aggiungiamo la magia del login e del logout. E per far sembrare tutto più bello, introdurremo un template base base.html
per dare al nostro blog un layout uniforme. Inoltre, faremo in modo che, dopo il logout, gli utenti vengano gentilmente reindirizzati alla pagina giusta – nessuno si deve perdere per strada!
Passo 1: Attivare l’Ambiente Virtuale (A.K.A. Indossare la Veste del Mago)
Prima di lanciare incantesimi, assicurati che il tuo ambiente virtuale sia attivo. È come accertarsi di indossare la veste del mago prima di lanciare una palla di fuoco. Non vogliamo incidenti, vero?
Controlla se è attivo con questo comando:
echo $VIRTUAL_ENV
Se ricevi un percorso come risposta, ottimo! Sei a posto. Altrimenti, attivalo con:
source venv/bin/activate
Una volta che vedi (venv)
all’inizio del prompt del terminale, significa che sei nel tuo comodo rifugio di codice, dove tutte le dipendenze sono al sicuro. Come un incantesimo che tiene fuori i troll. 🛡️
Passo 2: Autenticazione Utenti Integrata (Django – Il Maggiordomo del Codice)
Indovina un po’? Django ha già tutto pronto per te: un sistema di autenticazione utenti integrato! Ciò significa che non devi creare funzionalità di login da zero (chi ha tempo per questo?). Django è come un maggiordomo del codice che si occupa del lavoro pesante, così puoi concentrarti su cose più importanti – tipo scegliere lo snack perfetto per programmare.
Impostiamolo!
Vai su myblog/myblog/urls.py
(sì, due cartelle “myblog”) e aggiungi queste righe per includere le viste di login e logout:
from django.contrib.auth import views as auth_views
from django.urls import path, include # Importa include per i percorsi dell'app
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # Includi gli URL dell'app blog
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]
Ora Django si occupa del login e del logout. Fantastico, no? È come avere un maggiordomo invisibile per il tuo codice.
Passo 3: Reindirizzamento Dopo il Login e il Logout (Perché Nessuno Vuole Finire nel Limbo)
Per impostazione predefinita, Django reindirizza gli utenti a /accounts/profile/
dopo il login, ma siamo sinceri: nessuno vuole finire su una pagina casuale e noiosa. E facciamo anche in modo che, dopo il logout, gli utenti tornino gentilmente alla homepage del blog.
Aggiungi il Reindirizzamento Dopo il Login:
Apri il file settings.py
(che si trova in myblog/myblog/settings.py
) e aggiungi questa riga magica:
# Reindirizza alla homepage del blog dopo il login
LOGIN_REDIRECT_URL = '/blog/'
Aggiungi il Reindirizzamento Dopo il Logout:
Per garantire un’uscita degna, aggiungi questa riga sempre in settings.py
:
# Reindirizza alla homepage del blog dopo il logout
LOGOUT_REDIRECT_URL = '/blog/'
Con questo incantesimo, chiunque effettui il login o il logout verrà teletrasportato direttamente alla homepage del blog, dove accadono tutte le cose interessanti. 🎨
Passo 4: Creare il Template base.html
(Il Castello Elegante del Tuo Blog)
Mettiamoci seri: diamo un aspetto coerente al tuo blog, perché anche i maghi hanno stile. Creeremo un template base.html
che farà da fondazione alla struttura del tuo blog. Sarà come un castello magico con stanze che puoi decorare a piacimento su ogni pagina. 🏰
Vai alla directory blog/templates
e crea un file base.html
:
myblog/
blog/
templates/
base.html
Ora, riempi il file base.html
con questo bellissimo layout:
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Il Mio Blog{% endblock %}</title>
</head>
<body>
<header>
<h1>Il Mio Blog</h1>
<nav>
<ul>
<li><a href="{% url 'blog_index' %}">Home</a></li>
<li>
{% if user.is_authenticated %}
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Login</a>
{% endif %}
</li>
</ul>
</nav>
</header>
<div class="content">
{% block content %}
<!-- Qui andrà il contenuto specifico di ogni pagina -->
{% endblock %}
</div>
<footer>
<p>© 2024 Il Mio Blog. Tutti i diritti riservati. E sì, usiamo i cookie.</p>
</footer>
</body>
</html>
Ecco il nostro castello! 🎉 Ha un’intestazione, una barra di navigazione e un piè di pagina, pronto ad accogliere i visitatori. La magia avviene nel {% block content %}
– è lì che ogni pagina aggiungerà il suo tocco unico. 🍨
Passo 5: Creare il Template login.html
(Apriamo il Portone)
Abbiamo bisogno di creare una pagina di login dove gli utenti possano accedere. Django si aspetta che il template login.html
sia posizionato all’interno di una cartella registration
.
-
Vai alla directory
blog/templates
e crea una cartellaregistration
:- Dentro la cartella dell’app
blog
, crea una cartellatemplates
(se non esiste già), e poi crea una sotto-cartellaregistration
.
La struttura dovrebbe apparire così:
myblog/ blog/ templates/ registration/ login.html
- Dentro la cartella dell’app
-
Aggiungi il seguente codice in
login.html
per estendere il templatebase.html
:
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% block content %}
<h2>Accedi al Tuo Account</h2>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
{% endblock %}
Ora la tua pagina di login è pronta, e eredita il layout da base.html
così da essere in linea con il resto del sito. Sei pronto a far entrare gli utenti – ma solo quelli meritevoli! 😉
Passo 6: Aggiornare blog_index.html
e blog_post_detail.html
Ora che abbiamo il template base.html
, aggiorniamo i file blog_index.html
e blog_post_detail.html
per usare lo stesso layout.
6.1 Aggiorna blog_index.html
Vai su myblog/blog/templates/blog_index.html
e aggiorna il file così:
{% extends "base.html" %}
{% block title %}Home Blog{% endblock %}
{% block content %}
<h2>Benvenuto nel Mio Blog!</h2>
<ul>
{% for post in posts %}
<li>
<strong><a href="{% url 'blog_post_detail' post.pk %}">{{ post.title }}</a></strong> - {{ post.created_at }}
<p>{{ post.content|truncatewords:30 }}</p>
<a href="{% url 'blog_post_detail' post.pk %}">Leggi di Più</a>
</li>
{% endfor %}
</ul>
{% endblock %}
In questo modo estendiamo il template base.html
e diamo al blog un layout pulito e coerente.
6.2 Aggiorna blog_post_detail.html
Aggiorna il file myblog/blog/templates/blog_post_detail.html
così:
{% extends "base.html" %}
{% block title %}{{ post.title }}{% endblock %}
{% block content %}
<h2>{{ post.title }}</h2>
<p>{{ post.created_at }}</p>
<p>{{ post.content }}</p>
<h3>Commenti</h3>
<ul>
{% for comment in comments %}
<li><strong>{{ comment.author }}</strong>: {{ comment.content }}</li>
{% empty %}
<li>Nessun commento ancora. Sii il primo a commentare!</li>
{% endfor %}
</ul>
<h3>Lascia un Commento</h3>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Invia</button>
</form>
{% endblock %}
In questo modo anche le pagine dei singoli post usano il layout coerente di base.html
.
Passo 7: Aggiungi il Link per il Logout (Ogni Uscita Merita una Porta Degna)
Che senso ha fare login se non puoi fare logout? In base.html
, abbiamo già aggiunto il link per il logout nella barra di navigazione. Cambierà dinamicamente in base allo stato dell’utente (loggato o meno):
{% if user.is_authenticated %}
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Login</a>
{% endif %}
È come una porta magica – quando fai logout, ti accompagna fuori con gentilezza (probabilmente per farti prendere un caffè).
Passo 8: Testare la Magia (Qui Inizia il Divertimento)
È ora di testare le funzionalità di login e logout!
Avvia il server:
python3 manage.py runserver
Visita http://127.0.0.1:8000/login/ e prova ad accedere. Dopo il login, dovresti essere magicamente reindirizzato a http://localhost:8000/blog/ (o ovunque tu abbia impostato il LOGIN_REDIRECT_URL
).
Prova anche il logout – verrai reindirizzato alla homepage del blog (grazie a LOGOUT_REDIRECT_URL
).
Passo 9: Crea un Superuser (Ogni Castello Ha Bisogno di un Re)
Prima di concludere, non dimenticare di creare il tuo account superuser. Ti darà accesso completo al regno!
Esegui questo comando:
python3 manage.py createsuperuser
Compila i campi richiesti, e boom – hai ora accesso admin al tuo blog.
Passo 10: Disattivare l’Ambiente Virtuale (Anche i Maghi Hanno Bisogno di Riposo)
Quando hai finito per oggi (o hai bisogno di uno snack), non dimenticare di disattivare l’ambiente virtuale:
deactivate
Ora puoi rilassarti e andare a prendere quello snack, sapendo che il tuo blog Django è sicuro e stiloso.
Conclusione della Lezione 4
E voilà! 🎉 Non solo hai aggiunto l’autenticazione degli utenti (login e logout), ma hai anche disegnato il layout del tuo blog con un elegante template base.html
. Inoltre, gli utenti verranno ora reindirizzati alla homepage dopo il login e il logout – perché non vogliamo che nessuno si perda per strada.
La prossima volta, ci occuperemo di registrazione utenti, così il tuo blog potrà iniziare a guadagnare follower (che sicuramente commenteranno i tuoi post geniali). Fino ad allora, rilassati, ammira la tua magia da coder e magari premiati con qualcosa di dolce. 🍩
Vedi anche
- Lezione 6: Profili Utente – Perché Ognuno Merita un Po' di Celebrità
- Lezione 5: Registrazione Utenti – Perché Solo i Meritevoli Dovrebbero Commentare!
- Lezione 3: Form – L’Arte di Chiedere Gentilmente Dati agli Utenti (Senza Farli Scappare)
- Lezione 2: Il Pattern Model-View-Template (MVT) – Come MVC, Ma Con Più Magia e Meno Mal di Testa
- Lezione 1: Iniziamo con Django – Come Montare i Mobili IKEA, Ma con Meno Frustrazione (E un Ambiente Virtuale!)