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.
Défi
FacileAjoute un bouton Log out.
- Dans
base.html, sousSigned in as, ajoute un formulaire qui envoie une requête à{% url 'logout' %}avec{% csrf_token %}et un boutonLog out. - Dans
settings.py, définisLOGOUT_REDIRECT_URLsur"/".
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>
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
1Qui visite le site
Qui visite le siteSe connecterEntraînez-vous par vous-même : Playground Django