无效的代码:
from django.contrib.auth.models import Userfrom django.test import Clientuser = User.objects.create(username='testuser', password='12345')c = Client()logged_in = c.login(username='testuser', password='12345')
为什么不起作用?
在上面的代码段中,
User创建时,实际的密码哈希设置为
12345。当客户端调用该login方法时,password参数的值12345将通过哈希函数传递,结果是
hash('12345') = 'adkfh5lkad438....'然后将其与存储在数据库中的哈希进行比较,并且拒绝客户端访问,因为
'adkfh5lkad438....' != '12345'
解决方案
正确的做法是调用
set_password函数,该函数通过哈希函数传递给定的字符串并将结果存储在中
User.password。
另外,调用后,
set_password我们必须将更新的User对象保存到数据库中:
user = User.objects.create(username='testuser')user.set_password('12345')user.save()c = Client()logged_in = c.login(username='testuser', password='12345')


