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

Атрибут session

Атрибут session класса Client используется в тестах Django для доступа к данным сессии пользователя. Это позволяет проверять и изменять значения, хранящиеся в сессии, что особенно полезно при тестировании функциональности, зависящей от состояния сессии. Атрибут предоставляет объект, имитирующий сессию, с которым можно работать как со словарем.

Важно понимать, что изменения, внесенные в атрибут session, не сохраняются автоматически в базе данных сессий. Для сохранения изменений необходимо явно вызвать метод save. Это позволяет контролировать момент сохранения данных и избегать неожиданных побочных эффектов во время тестов.

Синтаксис

# Получение доступа к сессии session = client.session # Чтение значения value = session.get('key', default_value) # Установка значения session['key'] = value # Удаление ключа del session['key'] # Сохранение изменений session.save()

Пример

Давайте проверим, что в сессии сохраняется количество посещений страницы пользователем:

from django.test import TestCase from django.test import Client class SessionTest(TestCase): def test_session_counter(self): client = Client() # Получаем доступ к сессии session = client.session # Устанавливаем начальное значение счетчика session['visits'] = 0 session.save() # Имитируем посещение страницы response = client.get('/some-page/') # Проверяем, что счетчик увеличился session = client.session self.assertEqual(session['visits'], 1)

Пример

Проверим, что в сессии сохраняются данные пользователя после успешной авторизации:

from django.test import TestCase from django.test import Client from django.contrib.auth.models import User class SessionAuthTest(TestCase): def setUp(self): self.user = User.objects.create_user( username='testuser', password='testpass123' ) def test_user_data_in_session(self): client = Client() # Авторизуем пользователя client.login(username='testuser', password='testpass123') # Проверяем данные в сессии session = client.session self.assertEqual(session['_auth_user_id'], str(self.user.id)) self.assertEqual(session['_auth_user_backend'], 'django.contrib.auth.backends.ModelBackend')

Пример

Протестируем работу корзины покупок, которая хранится в сессии:

from django.test import TestCase from django.test import Client class CartTest(TestCase): def test_cart_operations(self): client = Client() # Добавляем товар в корзину через сессию session = client.session session['cart'] = [{'id': 1, 'quantity': 2}] session.save() # Проверяем, что корзина не пуста session = client.session self.assertTrue('cart' in session) self.assertEqual(len(session['cart']), 1) self.assertEqual(session['cart'][0]['id'], 1) self.assertEqual(session['cart'][0]['quantity'], 2) # Очищаем корзину session['cart'] = [] session.save() # Проверяем, что корзина пуста session = client.session self.assertEqual(session['cart'], [])

Пример

Проверим, что сообщения (messages) правильно сохраняются в сессии:

from django.test import TestCase from django.test import Client from django.contrib.messages import get_messages class MessagesTest(TestCase): def test_message_in_session(self): client = Client() # Выполняем действие, которое добавляет сообщение response = client.post('/submit-form/', {'data': 'test'}) # Проверяем сообщения через сессию session = client.session self.assertIn('_messages', session) messages = list(get_messages(response.wsgi_request)) self.assertEqual(len(messages), 1) self.assertEqual(str(messages[0]), 'Form submitted successfully')

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

  • класс Client,
    который предоставляет атрибут для работы с сессией
  • метод login,
    который автоматически управляет сессией пользователя
  • класс TestCase,
    который использует клиент для тестирования
  • метод post,
    который передает данные и может изменять сессию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить