gpt4 book ai didi

python - 为什么我需要在 Django 的 TestCase 中使用辅助方法 create_user() ?

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:12 25 4
gpt4 key购买 nike

测试失败:

class LoginTest(TestCase):
def test_login(self):
self.user = User(username='test', password='test')
self.user.save()
login = self.client.login(username='test', password='test')
self.assertTrue(login)

但是这通过了:

class LoginTest(TestCase):
def test_login(self):
self.user = User.objects.create_user(username='test', password='test')
login = self.client.login(username='test', password='test')
self.assertTrue(login)

谁能解释一下为什么?在 TestCase 类之外它可以工作。

编辑:它在测试用例之外工作,因为我正在尝试使用现有用户。请参阅 falsetru 答案。

最佳答案

如果您不使用User.objects.create_user,密码将按原样保存(不加密)。

check_password (由登录身份验证等内部使用)期望密码已加密。

如果不使用User.objects.create_user,最终代码应该会失败:

>>> from django.test import Client
>>> c = Client()
>>> user = User(username='test', password='test')
>>> user.save()
>>> c.login(username='test', password='test')
False
>>> from django.contrib.auth import authenticate
>>> authenticate(username='test', password='test') # => None
>>>

使用User.objects.create_user!

>>> user2 = User.objects.create_user(username='test2', password='test')
>>> c.login(username='test2', password='test')
True
>>> authenticate(username='test2', password='test')
<User: test2>
>>> user2.check_password('test')
True

关于python - 为什么我需要在 Django 的 TestCase 中使用辅助方法 create_user() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288990/

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