Cerrar sesión
Parte de la sección Usuarios y cuentas del Journey de Django de Coddy. Lección 3 de 16.
Un usuario que ha iniciado sesión no tiene forma de cerrarla. El mismo include() agregó /accounts/logout/, con el nombre logout: termina la sesión, por lo que la cookie ya no apunta a ningún usuario.
Un enlace simple no sirve. Un enlace envía una solicitud GET, y una solicitud GET nunca debería cambiar nada: una página podría ocultar una imagen cuya dirección sea tu URL de cierre de sesión y cerrar tu sesión. Por eso, LogoutView solo acepta POST y responde a una solicitud GET con 405 Method not allowed.
Un botón que cambia algo es un pequeño formulario POST, incluso si no tiene campos. Su action indica la URL a la que envía la solicitud, así que puede estar en cualquier página:
<form method="post" action="{% url 'cart:empty' %}">
{% csrf_token %}
<button type="submit">Empty cart</button>
</form>Después de cerrar sesión, Django redirige a LOGOUT_REDIRECT_URL.
Desafío
Fácil- En
base.html, debajo deSigned in as ..., un botónLog outcierra la sesión del usuario. - Después de cerrar la sesión, el visitante llega a
/.
Pulsa Run, inicia sesión como ada (contraseña coddy-pass-123) y luego pulsa Log out.
Pruébalo tú mismo
{% 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>
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Usuarios y cuentas
1Quién está visitando
Quién está visitandoIniciar sesiónPractica por tu cuenta: Playground de Django