无效的代码:
from django.contrib.auth.models import User
from django.test import Client
user = 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')