为什么用户在 Django 测试用例中自动进行身份验证?
Why user autometically authenticated in django test case?
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from faker import Faker
fake = Faker()
APICLIENT = APIClient()
from factory_djoy import UserFactory
class TestAccount(APITestCase):
def setUp(self):
self.user = UserFactory()
def test_print_name(self):
print(self.user.is_authenticated)
# do something here
为什么 print(self.user.is_authenticated) 是正确的。我尝试使用 User.objects.create 创建一个用户,它也 returns 与 is_authenticated 相同 True.
我的理解是在做login或force_authenticate之前不应该是True。 我哪里做错了或者我的理解不正确?
.is_authenticated
does not 表示用户在服务器端进行了身份验证。所有User
对象都有is_authenticated = True
,用来区分一个User
[Django-doc] object, and the AnonymousUser
[Django-doc].
事实上,默认情况下,如果您查找 request.user
,如果没有用户附加到设置,它将 return 一个 AnonymousUser
对象,或者 User
对象,如果会话绑定到该用户。
对于内置 User
模型,.is_autenticated
will thus always return True
[GitHub]:
@property
def is_authenticated(self):
"""
Always return True. This is a way to tell if the user has been
authenticated in templates.
"""
return True
然而,您可以定义自己的自定义用户模型,并定义更复杂的测试:例如,只有具有 is_active
的用户才能通过身份验证,或者只有在最近两个用户处于活动状态时才能通过身份验证例如几个月。
如果您在视图 if user.is_authenticated
中编写,它将因此为内置用户模型区分 AnonymousUser
(即 return False
),和一个 User
。但是您可以使用自定义实现来定义自定义用户模型。
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from faker import Faker
fake = Faker()
APICLIENT = APIClient()
from factory_djoy import UserFactory
class TestAccount(APITestCase):
def setUp(self):
self.user = UserFactory()
def test_print_name(self):
print(self.user.is_authenticated)
# do something here
为什么 print(self.user.is_authenticated) 是正确的。我尝试使用 User.objects.create 创建一个用户,它也 returns 与 is_authenticated 相同 True.
我的理解是在做login或force_authenticate之前不应该是True。 我哪里做错了或者我的理解不正确?
.is_authenticated
does not 表示用户在服务器端进行了身份验证。所有User
对象都有is_authenticated = True
,用来区分一个User
[Django-doc] object, and the AnonymousUser
[Django-doc].
事实上,默认情况下,如果您查找 request.user
,如果没有用户附加到设置,它将 return 一个 AnonymousUser
对象,或者 User
对象,如果会话绑定到该用户。
对于内置 User
模型,.is_autenticated
will thus always return True
[GitHub]:
@property def is_authenticated(self): """ Always return True. This is a way to tell if the user has been authenticated in templates. """ return True
然而,您可以定义自己的自定义用户模型,并定义更复杂的测试:例如,只有具有 is_active
的用户才能通过身份验证,或者只有在最近两个用户处于活动状态时才能通过身份验证例如几个月。
如果您在视图 if user.is_authenticated
中编写,它将因此为内置用户模型区分 AnonymousUser
(即 return False
),和一个 User
。但是您可以使用自定义实现来定义自定义用户模型。