我有这个测试用例
def setUp(self):
self.user = User.objects.create(username="tauri", password='gaul')
def test_loginin_student_control_panel(self):
c = Client()
c.login(username="tauri", password="gaul")
response = c.get('/student/')
self.assertEqual(response.status_code, 200)
与测试用例相关联的视图如下
@login_required
def student(request):
return render_to_response('student/controlpanel.html')
所以我的问题是为什么上面的测试用例会将用户重定向到登录 佩奇?c.login不应该负责认证用户吗?你知道吗
问题在于创建用户对象的方式。你知道吗
Django不会将密码以明文形式存储在数据库中,而是存储其哈希值。但是在你的密码里密码是用纯文本设置的。你知道吗
因此,当您在内部使用
c.login(...)
时,Django将调用check_password
方法,该方法将根据您传递的密码生成哈希值,并将其与存储在数据库中的密码进行比较,结果将返回False
,因为DB中的“gaul”不等于get\u hexdigest('gaul')有两种选择:
1)使用
User.objects.create_user
方法处理密码散列:2)或使用
set_password
方法设置密码:是否确保在设置函数中创建用户条目?你知道吗
User.objects.create_user(username="tauri", password="gual")
相关问题 更多 >
编程相关推荐