为什么用户在 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.

我的理解是在做loginforce_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。但是您可以使用自定义实现来定义自定义用户模型。