首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有关于django测试的问题

我有关于django测试的问题
EN

Stack Overflow用户
提问于 2010-03-28 10:10:07
回答 2查看 142关注 0票数 0

我有一个测试用例

代码语言:javascript
复制
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)

与测试用例关联的视图如下所示

代码语言:javascript
复制
@login_required
def student(request):
    return render_to_response('student/controlpanel.html')

所以我的问题是,为什么上面的测试用例将用户重定向到登录页面?难道c.login不应该注意用户的身份验证吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-28 13:19:04

问题出在创建用户对象的方式上。

Django不会将您的密码以纯文本形式存储在数据库中,它会存储其哈希值。但是在您的代码中,密码是以纯文本形式设置的。

因此,当您在内部使用c.login(...)时,Django将调用check_password方法,该方法将根据您传递的密码生成一个哈希值,并将其与存储在数据库中的密码进行比较,结果将返回False,因为DB中的'gaul‘不等于get_hexdigest('gaul')

有两个选项:

1)使用能够处理密码散列的User.objects.create_user方法:

代码语言:javascript
复制
def setUp(self):
    self.user = User.objects.create_user(username='tauri', 
                                         password='gaul', 
                                         email='')

2)或使用set_password方法设置密码:

代码语言:javascript
复制
def setUp(self):
    self.user = user = User.objects.create(username='tauri')
    user.set_password('gaul')
    user.save()
票数 4
EN

Stack Overflow用户

发布于 2010-03-28 11:11:19

您是否确保在setUp函数中创建了用户条目?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2531658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档