Menu
CoddyTech

Disconnessione

Fa parte della sezione Utenti e account del percorso Django di Coddy. Lezione 3 di 16.

Un utente che ha effettuato l'accesso non ha modo di uscire. Lo stesso include() ha aggiunto /accounts/logout/, denominato logout: termina la sessione, quindi il cookie non punta più a un utente.

Un semplice link non basta. Un link invia una richiesta GET, e una richiesta GET non dovrebbe mai modificare nulla: una pagina potrebbe nascondere un'immagine il cui indirizzo è il tuo URL di uscita e disconnetterti. Perciò LogoutView accetta solo richieste POST e una richiesta GET riceve 405 Method not allowed.

Un pulsante che modifica qualcosa è un piccolo modulo POST, anche senza campi. Il suo action indica l'URL a cui invia la richiesta, quindi può trovarsi su qualsiasi pagina:

<form method="post" action="{% url 'cart:empty' %}">
    {% csrf_token %}
    <button type="submit">Empty cart</button>
</form>

Dopo aver effettuato la disconnessione, Django reindirizza a LOGOUT_REDIRECT_URL. Non ha un valore predefinito: senza impostarlo, vedrai la pagina di disconnessione dell'amministrazione. Impostalo su "/" in settings.py.

challenge icon

Sfida

Facile

Aggiungi un pulsante Log out.

  1. In base.html, sotto Signed in as, aggiungi un modulo che invii una richiesta a {% url 'logout' %} con {% csrf_token %} e un pulsante Log out.
  2. In settings.py, imposta LOGOUT_REDIRECT_URL su "/".

Accedi come ada (password coddy-pass-123) e premi Esci: nell’intestazione compare You are not signed in.

Provalo tu

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>{% block title %}Notes{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'notes/style.css' %}">
</head>
<body>
    <header>
        <a class="brand" href="{% url 'notes:list' %}">Notes</a>
        <nav>
            <a href="{% url 'notes:create' %}">New note</a>
        </nav>
        <div class="account">
            {% if user.is_authenticated %}
            <p>Signed in as {{ user.username }}</p>
            {% else %}
            <p>You are not signed in.</p>
            <a href="{% url 'login' %}">Log in</a>
            {% endif %}
        </div>
    </header>
    <main>
        {% block content %}{% endblock %}
    </main>
</body>
</html>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Utenti e account

Esercitati da solo: Playground Django