Django 中的测试用户注销失败

Test User logout in Django fails

我需要测试我的用户是否正确注销。当我尝试注销时,测试失败。

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 对象将不成立。登录是 session-oriented,而不是 user-oriented,这意味着对于给定的会话,如果会话变量指的是用户。一个User可以同时登录多个session

因为 User model [Django-doc] object, is_authenticated [Django-doc] will always be True, and is_anonymous [Django-doc] 将永远是 False,无论是否有您登录的任何会话。

Django 然而已经有一个 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] 到:

# settings.py

<strong>LOGOUT_REDIRECT_URL = 'login'</strong>

然后在 url 中使用 LogoutView.as_view() 作为注销视图。

通常最好使用已由 Django 实现的逻辑组件,这将实现、测试、维护和错误修复的负担从您转移到 Django 开发人员,并且由于很多用户使用这些视图,很可能会更有效地检测和修复错误。