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, donc le cookie ne pointe plus vers un utilisateur.

Un simple lien ne suffit pas. Un lien envoie une requête GET, et une requête GET ne devrait jamais rien modifier : une page pourrait masquer une image dont l’adresse est votre URL de déconnexion et vous déconnecter. C’est pourquoi LogoutView n’accepte que les requêtes POST et répond à une requête GET par 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 se trouver 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.

challenge icon

Défi

Facile
  • Dans base.html, sous Signed in as ..., un bouton Log out déconnecte l’utilisateur.
  • Après la déconnexion, le visiteur arrive sur /.

Appuyez sur Run, connectez-vous en tant que ada (mot de passe coddy-pass-123), puis appuyez sur Log out.

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