Класс LogoutView

Класс LogoutView применяется для обработки выхода пользователя из системы. Он очищает данные аутентификации в сессии и перенаправляет пользователя на страницу, указанную в атрибуте next_page или в GET-параметре next. По умолчанию класс доступен через встроенное представление django.contrib.auth.views.LogoutView.

Синтаксис

pythonfrom django.contrib.auth.views import LogoutView

# В urls.py
urlpatterns = [
    path('logout/', LogoutView.as_view(), name='logout'),
]

Пример

Создадим URL для выхода пользователя и укажем страницу перенаправления через атрибут next_page:

python# urls.py
from django.contrib.auth.views import LogoutView
from django.urls import path

urlpatterns = [
    path('logout/', LogoutView.as_view(next_page='/'), name='logout'),
]

При переходе по адресу /logout/ пользователь будет выведен из системы и перенаправлен на главную страницу.

Пример

Используем параметр GET next для динамического перенаправления после выхода:

python# urls.py
from django.contrib.auth.views import LogoutView
from django.urls import path

urlpatterns = [
    path('logout/', LogoutView.as_view(), name='logout'),
]

# В шаблоне ссылка на выход с параметром next
<a href="{% url 'logout' %}?next=/custom-page/">Выйти</a>

Результат выполнения кода:

python"Пользователь выведен и перенаправлен на /custom-page/"

Пример

Настроим собственный шаблон для страницы выхода с подтверждением. Для этого переопределим атрибут template_name:

python# urls.py
from django.contrib.auth.views import LogoutView
from django.urls import path

urlpatterns = [
    path('logout/', LogoutView.as_view(template_name='registration/logout.html'), name='logout'),
]

# registration/logout.html
<!DOCTYPE html>
<html>
<head>
    <title>Выход</title>
</head>
<body>
    <h1>Вы вышли из системы</h1>
    <a href="/">Вернуться на главную</a>
</body>
</html>

Результат выполнения кода:

python"Отображается кастомная страница выхода"

Пример

При необходимости можно задать атрибут next_page динамически во вьюхе или через настройки. Если атрибут не задан, используется значение параметра GET next, а если и его нет - то настройка LOGOUT_REDIRECT_URL:

python# settings.py
LOGOUT_REDIRECT_URL = '/accounts/login/'

# urls.py
from django.contrib.auth.views import LogoutView
from django.urls import path

urlpatterns = [
    path('logout/', LogoutView.as_view(), name='logout'),
]

Результат выполнения кода:

python"Перенаправление на /accounts/login/ после выхода"

Смотрите также

  • функция authenticate,
    которая проверяет учетные данные пользователя
  • класс LoginView,
    который обрабатывает вход пользователя в систему
  • функция logout,
    которая выполняет выход вручную
  • декоратор login_required,
    который ограничивает доступ к представлениям