我和Django有问题

2024-03-28 10:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个测试用例

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不应该负责认证用户吗?你知道吗


Tags: 用户selfobjectsresponsedefsetupusername测试用例
2条回答

问题在于创建用户对象的方式。你知道吗

Django不会将密码以明文形式存储在数据库中,而是存储其哈希值。但是在你的密码里密码是用纯文本设置的。你知道吗

因此,当您在内部使用c.login(...)时,Django将调用check_password方法,该方法将根据您传递的密码生成哈希值,并将其与存储在数据库中的密码进行比较,结果将返回False,因为DB中的“gaul”不等于get\u 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()

是否确保在设置函数中创建用户条目?你知道吗

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

相关问题 更多 >