Выход из системы
Часть раздела Пользователи и учетные записи путешествия по Django на Coddy. Урок 3 из 16.
У вошедшего в систему пользователя нет способа выйти из системы. Тот же include() добавил /accounts/logout/ с именем logout: он завершает сеанс, поэтому cookie больше не указывает на пользователя.
Обычная ссылка не подойдёт. Ссылка отправляет GET-запрос, а GET-запрос никогда не должен ничего менять: страница может скрыть изображение, адрес которого совпадает с URL выхода из системы, и тем самым вывести вас из системы. Поэтому LogoutView принимает только POST-запросы и отвечает на GET-запрос кодом 405 Метод не разрешён.
Кнопка, которая что-то меняет, — это небольшая POST-форма, даже если в ней нет полей. Её атрибут action задаёт URL, на который она отправляет данные, поэтому такую форму можно разместить на любой странице:
<form method="post" action="{% url 'cart:empty' %}">
{% csrf_token %}
<button type="submit">Empty cart</button>
</form>После выхода из системы Django перенаправляет пользователя на LOGOUT_REDIRECT_URL.
Задание
Легко- В
base.htmlпод текстомSigned in as ...кнопкаLog outвыполняет выход пользователя из системы. - После выхода посетитель попадает на
/.
Нажми Run, войди как ada (пароль coddy-pass-123), затем нажми Log out.
Попробуйте сами
{% 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>
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Пользователи и учетные записи
3Ваши собственные данные
У заметки есть владелецТолько мои заметкиПотренируйтесь самостоятельно: Песочница Django