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(为True。我曾尝试简单地使用user.objects.create创建用户,它也返回与is_authenticated相同的结果True。
我的理解是,在执行登录或force_authenticate之前,它不应该是True我做错了什么,还是我的理解不正确?
.is_authenticated
不意味着用户在服务器端进行身份验证。所有User
对象都有is_authenticated = True
,它用于区分User
[Django-doc]对象和AnonymousUser
Django-dok]对象。
事实上,默认情况下,如果您查找request.user
,如果没有用户连接到该设置,它将返回一个AnonymousUser
对象,或者如果会话绑定到该用户,则返回User
对象。
对于内置的User
模型,.is_autenticated
将始终返回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
(将返回False
(和User
。但是,您可以使用自定义实现来定义自定义用户模型。