Тест Выход пользователя из системы в Django не удался
Мне нужно проверить, правильно ли мой пользователь вышел из системы. Когда я пытаюсь выйти из системы, тест не проходит.
def test_user_logout(self):
"""Test user logout."""
user = User.objects.create_user(username="test", password="test")
self.logged_in = self.client.force_login(user=user)
response = self.client.post(path=reverse("logout"), follow=True)
self.assertEqual(response.status_code, 200)
self.assertRedirects(response, reverse("login"))
self.assertTrue(user.is_anonymous) # this fails
Мой метод просмотра:
def user_logout(request):
logout(request)
return redirect("login")
Объект User не сохраняется, если этот пользователь вошел в систему (в любой сессии). Logged in является ориентированным на сессию, а не ориентированным на пользователя, поэтому это означает, что для данной сессии вы вошли в систему, если переменные сессии ссылаются на пользователя. Таким образом, User может быть одновременно зарегистрирован в нескольких сессиях.
For a User model [Django-doc] object, is_authenticated [Django-doc] will always be True, and is_anonymous [Django-doc] will always be False, regardless whether there is any session where you have logged in.
Django however has already a LogoutView view [Django-doc]. It is the responsibility of the developers of Django to test this view effectively. Your logout_view can thus be replaced with this view. You can set the LOGOUT_REDIRECT_URL setting [Django-doc] to:
# settings.py
LOGOUT_REDIRECT_URL = 'login'
и затем используйте LogoutView.as_view() в урлах как view для выхода из системы.
Обычно лучше работать с логическими компонентами, которые уже реализованы в Django, это переносит бремя реализации, тестирования, поддержки и исправления ошибок с вас на разработчиков Django, а поскольку многие пользователи используют эти представления, вероятно, что ошибки будут обнаружены и исправлены более эффективно.