Lezione 5: Registrazione Utenti – Perché Solo i Meritevoli Dovrebbero Commentare!
Ah, sei arrivato fin qui! 🧙♂️ Il tuo blog è online, i post stanno andando alla grande e i commenti stanno arrivando (si spera). Ma aspetta… dovremmo permettere a chiunque di commentare? No, no, no! Serve un po’ di esclusività. Solo le anime meritevoli, quelle registrate, dovrebbero poter condividere la loro saggezza (o le loro opinioni sulla pizza con l’ananas 🍕).
In questa lezione, aggiungeremo la registrazione degli utenti, così che i visitatori possano iscriversi, fare login e commentare. E, già che ci siamo, bloccheremo i commenti per chi non è registrato. Pronti? Andiamo!
Passo 1: Attiva l’Ambiente Virtuale (Il Magico Inizio)
Prima di tutto, assicurati che il tuo ambiente virtuale sia attivo. Questa è la tua bolla magica che garantisce che tutto funzioni senza intoppi.
Se non sei già dentro, esegui:
source venv/bin/activate
Quando vedi (venv)
all’inizio del prompt del terminale, sei pronto per partire. 🧙♂️
Passo 2: Aggiorna forms.py
per Rimuovere il Campo author
e Aggiungere CustomUserCreationForm
Ora modificheremo il form per rimuovere il campo author
da CommentForm
e definiremo il nostro form personalizzato per la registrazione degli utenti.
Percorso file: myblog/blog/forms.py
Aggiorna il tuo forms.py
in questo modo:
from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['content'] # Solo il campo per il contenuto del commento
class CustomUserCreationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
Con questa configurazione:
- Ora chiediamo solo il contenuto del commento, e l’autore verrà impostato automaticamente.
- Abbiamo un
CustomUserCreationForm
che aggiunge un campo email al form di registrazione.
Passo 3: Modifica la View blog_post_detail
per Assegnare l’Autore al Commento
Dato che non chiediamo più l’autore nel form, assegneremo l’autore come l’utente loggato nella view.
Percorso file: myblog/blog/views.py
Ecco come aggiornare la view blog_post_detail
:
from django.shortcuts import render, get_object_or_404, redirect
from .models import BlogPost, Comment
from .forms import CommentForm
def blog_post_detail(request, pk):
post = get_object_or_404(BlogPost, pk=pk)
comments = post.comments.all()
if request.method == 'POST':
if request.user.is_authenticated:
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.blog_post = post
comment.author = request.user.username # Assegna automaticamente l'utente loggato come autore
comment.save()
return redirect('blog_post_detail', pk=post.pk)
else:
return redirect('login') # Reindirizza al login se l'utente non è autenticato
else:
form = CommentForm()
return render(request, 'blog_post_detail.html', {'post': post, 'comments': comments, 'form': form})
Passo 4: Crea la View register
per Gestire la Registrazione degli Utenti
Ora creeremo una view che gestisce la registrazione degli utenti. Se il form è valido, l’utente verrà loggato automaticamente e reindirizzato alla pagina principale del blog.
Percorso file: myblog/blog/views.py
Aggiungi questo codice per creare la view di registrazione:
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user) # Logga automaticamente l'utente dopo la registrazione
return redirect('blog_index')
else:
form = CustomUserCreationForm()
return render(request, 'registration/register.html', {'form': form})
Passo 5: Crea il Template di Registrazione
Abbiamo bisogno di un template per la pagina di registrazione, così gli utenti possono inserire il loro username, email e password.
Percorso file:
myblog/
blog/
templates/
registration/
register.html
Ecco il contenuto per register.html
:
{% extends "base.html" %}
{% block title %}Registrati{% endblock %}
{% block content %}
<h2>Crea un Account</h2>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Registrati</button>
</form>
{% endblock %}
Passo 6: Aggiungi la Route di Registrazione in urls.py
Aggiungiamo la route per la pagina di registrazione in urls.py
.
Percorso file: myblog/blog/urls.py
Aggiungi le seguenti route in urls.py
:
from . import views
urlpatterns = [
path('', views.blog_index, name='blog_index'),
path('post/<int:pk>/', views.blog_post_detail, name='blog_post_detail'),
path('register/', views.register, name='register'), # Pagina di registrazione
]
Ora la pagina di registrazione è accessibile su /register/
.
Passo 7: Aggiorna blog_post_detail.html
per Bloccare i Commenti ai Non Registrati
Facciamo in modo che solo gli utenti loggati possano commentare e che chi non è loggato venga gentilmente reindirizzato a fare login o registrarsi.
Percorso file:
myblog/
blog/
templates/
blog_post_detail.html
Aggiorna la sezione dei commenti in blog_post_detail.html
:
<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 condividere i tuoi pensieri!</li>
{% endfor %}
</ul>
{% if user.is_authenticated %}
<h3>Lascia un Commento</h3>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Invia</button>
</form>
{% else %}
<p><a href="{% url 'login' %}">Accedi</a> o <a href="{% url 'register' %}">registrati</a> per lasciare un commento!</p>
{% endif %}
Ora solo gli utenti loggati possono lasciare commenti.
Passo 8: Testa il Processo di Registrazione e Commento
Una volta apportate tutte le modifiche, avvia il server e testa la registrazione e la funzionalità dei commenti eseguendo:
python3 manage.py runserver
Visita http://127.0.0.1:8000/register/ per registrarti e prova a commentare su un post come utente loggato.
Passo 9: Disattiva l’Ambiente Virtuale (La Magia Ha Bisogno di Riposo)
Quando hai finito, non dimenticare di disattivare l’ambiente virtuale:
deactivate
E così, sei tornato nel mondo reale (senza magia, ma con tanto codice funzionante).
Conclusione della Lezione 5
Boom! 🎉 Hai aggiunto con successo la registrazione degli utenti al tuo blog e hai fatto in modo che solo gli utenti registrati possano lasciare commenti. Niente più troll anonimi che si infiltrano nei tuoi post! Hai anche ripulito il form dei commenti e fatto in modo che la registrazione funzioni come un incantesimo.
Nella prossima lezione, ci immergeremo nei profili utente – perché ogni utente merita un po’ di personalità sul tuo blog. Fino ad allora, divertiti a guardare crescere la tua base di utenti registrati! 🎩✨
Vedi anche
- Lezione 6: Profili Utente – Perché Ognuno Merita un Po' di Celebrità
- Lezione 4: Autenticazione Utenti – Perché Non Tutti Dovrebbero Accedere al Santuario Segreto del Tuo Blog
- 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!)