Lezione 4: Autenticazione Utenti – Perché Non Tutti Dovrebbero Accedere al Santuario Segreto del Tuo Blog


Lezione 4

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>&copy; 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.

  1. Vai alla directory blog/templates e crea una cartella registration:

    • Dentro la cartella dell’app blog, crea una cartella templates (se non esiste già), e poi crea una sotto-cartella registration.

    La struttura dovrebbe apparire così:

    myblog/
        blog/
            templates/
                registration/
                    login.html
    
  2. Aggiungi il seguente codice in login.html per estendere il template base.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.


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