gpt4 book ai didi

python - Django 测试客户端不登录

转载 作者:太空狗 更新时间:2023-10-29 17:05:01 26 4
gpt4 key购买 nike

我正在尝试使用其内置的登录功能登录测试客户端。我正在尝试对 View 进行单元测试,需要登录才能测试其中的一些 View 。我已经尝试这样做太久了,需要帮助。一些注意事项:

create_user() 确实创建了一个有效的用户,它已经被用在其他地方。

根据我对 client.login() 的了解,它返回一个 bool 值,当我运行测试时失败是“False is not True”,所以这似乎是正确的。

我成功登录的唯一方法是调用 client.post("/my/login/url", {u​​sername and password in dict.})但是,出于某种原因,我发现非常奇怪的所有测试用例都没有保持登录状态。

def setUp(self):
"""
Initializes the test client and logs it in.
"""
self.user = create_user()
self.logged_in = self.client.login(username=self.user.username, password=self.user.password)

def test_valid(self):
self.assertTrue(self.logged_in)

我已将其更改为以下内容:

def setUp(self):
"""
Initializes the test client and logs it in.
"""
self.password = "password"
self.user = create_user(password=self.password)
self.logged_in = self.client.login(username=self.user.username, password=self.password)

还是登录不上

create user在类"Static"中,user_count初始化为0,函数如下:

def create_user(username=None, password=None, email=None, is_superuser=False):
if username is None:
username = "user%d" % Static.user_count
while User.objects.filter(username=username).count() != 0:
Static.user_count += 1
username = "user%d" % Static.user_count
if password is None:
password = "password"
if email is None:
email="user%d@test.com" % Static.user_count

Static.user_count += 1
user = User.objects.create(username=username, password=password, is_superuser=is_superuser)

最佳答案

您不能直接访问密码。 password 属性已加密。 (参见 Password management in Django。)

例如,这里是密码输出示例。

>>> user = User.objects.create_user(username='asdf', email='asdf@example.com', password='xxxx')
>>> user.password
'sha1$166e7$4028738f0c0df0e7ec3cec06843c35d2b5a1aae8'

如你所见,user.password不是我给的xxxx

我会修改 create_user 以接受可选的密码参数。并将密码传递给 create_userclient.login,如下所示:

def setUp(self):
"""
Initializes the test client and logs it in.
"""
password = 'secret'
self.user = create_user(password=password)
self.logged_in = self.client.login(username=self.user.username, password=password)

更新

create_user 应该使用 User.objects.create_user而不是 User.objects.create。并且应该返回创建的用户对象:

def create_user(username=None, password=None, email=None, is_superuser=False):
if username is None:
username = "user%d" % Static.user_count
while User.objects.filter(username=username).count() != 0:
Static.user_count += 1
username = "user%d" % Static.user_count
if password is None:
password = "password"
if email is None:
email="user%d@test.com" % Static.user_count

Static.user_count += 1
user = User.objects.create_user(username=username, password=password)
# ^^^^^^^^^^^
user.is_superuser = is_superuser
user.save()
return user # <---

关于python - Django 测试客户端不登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com