Метод logout
Метод logout применяется к объекту тестового клиента
Client и выполняет выход текущего авторизованного
пользователя. После вызова этого метода клиент теряет
информацию о сессии пользователя, и все последующие
запросы будут выполняться от имени анонимного пользователя.
Метод не принимает никаких аргументов и не возвращает
значения.
Синтаксис
client.logout()
Пример . С авторизованным пользователем
Давайте создадим тест, в котором мы авторизуем пользователя, проверим доступ к защищенной странице, затем выполним выход и убедимся, что доступ запрещен:
from django.test import TestCase, Client
from django.contrib.auth.models import User
from django.urls import reverse
class LogoutTest(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(
username='testuser',
password='testpass123'
)
def test_logout_method(self):
# Login user
self.client.login(username='testuser', password='testpass123')
# Check access to protected page
response = self.client.get('/profile/')
self.assertEqual(response.status_code, 200)
# Logout user
self.client.logout()
# Check access after logout
response = self.client.get('/profile/')
self.assertEqual(response.status_code, 302)
Пример . Работа с сессией
Метод logout также очищает данные сессии пользователя.
Рассмотрим пример проверки состояния сессии до и после выхода:
from django.test import TestCase, Client
from django.contrib.auth.models import User
class SessionLogoutTest(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(
username='testuser',
password='testpass123'
)
def test_session_clearing(self):
# Login and set session data
self.client.login(username='testuser', password='testpass123')
session = self.client.session
session['favorite_color'] = 'blue'
session.save()
# Check session exists
self.assertIn('favorite_color', self.client.session)
# Logout
self.client.logout()
# Check session is cleared
session = self.client.session
self.assertNotIn('favorite_color', session)
Результат выполнения кода:
"Session cleared successfully"
Пример . Проверка состояния пользователя
После вызова logout текущий пользователь становится
анонимным. Проверим это с помощью метода is_authenticated:
from django.test import TestCase, Client
from django.contrib.auth.models import User
class UserStateTest(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(
username='testuser',
password='testpass123'
)
def test_user_authentication_state(self):
# Check initial anonymous state
response = self.client.get('/some-page/')
self.assertFalse(response.context['user'].is_authenticated)
# Login
self.client.login(username='testuser', password='testpass123')
response = self.client.get('/some-page/')
self.assertTrue(response.context['user'].is_authenticated)
# Logout
self.client.logout()
response = self.client.get('/some-page/')
self.assertFalse(response.context['user'].is_authenticated)
Смотрите также
-
метод
login,
который выполняет вход пользователя в тестовом клиенте -
метод
force_login,
который принудительно авторизует пользователя без проверки пароля -
класс
TestCase,
который предоставляет тестовую среду с поддержкой клиента -
атрибут
client,
который предоставляет экземпляр тестового клиента в TestCase