РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
785 of 818 menu

Метод 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить