Menu
CoddyTech

Se déconnecter

Fait partie de la section Utilisateurs et comptes du Journey Django de Coddy. Leçon 3 sur 16.

Un utilisateur connecté ne peut pas se déconnecter. Le même include() a ajouté /accounts/logout/, nommé logout : il met fin à la session, de sorte que le cookie ne renvoie plus vers un utilisateur.

Un simple lien ne convient pas. Un lien envoie une requête GET, et une requête GET ne doit jamais rien modifier : une page pourrait masquer une image dont l’adresse est votre URL de déconnexion et vous déconnecter. Ainsi, LogoutView n’accepte que les requêtes POST, et une requête GET renvoie 405 Method not allowed.

Un bouton qui modifie quelque chose est un petit formulaire POST, même sans champ. Son action indique l’URL à laquelle il envoie la requête, il peut donc figurer sur n’importe quelle page :

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

Après la déconnexion, Django redirige vers LOGOUT_REDIRECT_URL. Aucune valeur n’est définie par défaut : sans cette valeur, vous voyez la page de déconnexion de l’interface d’administration. Définissez-la sur "/" dans settings.py.

challenge icon

Défi

Facile

Ajoute un bouton Log out.

  1. Dans base.html, sous Signed in as, ajoute un formulaire qui envoie une requête à {% url 'logout' %} avec {% csrf_token %} et un bouton Log out.
  2. Dans settings.py, définis LOGOUT_REDIRECT_URL sur "/".

Connecte-toi avec le compte ada (mot de passe coddy-pass-123), puis appuie sur « Se déconnecter » : l’en-tête affiche You are not signed in.

Essayez vous-même

{% 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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Utilisateurs et comptes

Entraînez-vous par vous-même : Playground Django