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 开发人员,并且由于很多用户使用这些视图,很可能会更有效地检测和修复错误。
我需要测试我的用户是否正确注销。当我尝试注销时,测试失败。
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 开发人员,并且由于很多用户使用这些视图,很可能会更有效地检测和修复错误。