我有一个测试用例
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不应该注意用户的身份验证吗?
发布于 2010-03-28 13:19:04
问题出在创建用户对象的方式上。
Django不会将您的密码以纯文本形式存储在数据库中,它会存储其哈希值。但是在您的代码中,密码是以纯文本形式设置的。
因此,当您在内部使用c.login(...)时,Django将调用check_password方法,该方法将根据您传递的密码生成一个哈希值,并将其与存储在数据库中的密码进行比较,结果将返回False,因为DB中的'gaul‘不等于get_hexdigest('gaul')
有两个选项:
1)使用能够处理密码散列的User.objects.create_user方法:
def setUp(self):
self.user = User.objects.create_user(username='tauri',
password='gaul',
email='')2)或使用set_password方法设置密码:
def setUp(self):
self.user = user = User.objects.create(username='tauri')
user.set_password('gaul')
user.save()发布于 2010-03-28 11:11:19
您是否确保在setUp函数中创建了用户条目?
User.objects.create_user(username="tauri", password="gual")
https://stackoverflow.com/questions/2531658
复制相似问题