我有django测试的问题

时间:2010-03-28 02:10:07

标签: python django unit-testing

我有这个测试用例

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不应该注意认证用户吗?

2 个答案:

答案 0 :(得分:4)

问题在于您创建User对象的方式。

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()

答案 1 :(得分:1)

您确定在setUp功能中创建了用户条目吗?

User.objects.create_user(username="tauri", password="gual")