Lezione 5: Registrazione Utenti – Perché Solo i Meritevoli Dovrebbero Commentare!


Lezione 5

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