Тест Выход пользователя из системы в 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, а поскольку многие пользователи используют эти представления, вероятно, что ошибки будут обнаружены и исправлены более эффективно.

Вернуться на верх