Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我对django测试有问题_Python_Django_Unit Testing - Fatal编程技术网

Python 我对django测试有问题

Python 我对django测试有问题,python,django,unit-testing,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.ass

我有这个测试用例

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不应该负责验证用户吗?

您是否确保在设置功能中创建用户条目


User.objects.create\u User(username=“tauri”,password=“gual”)

是否确保在设置功能中创建用户条目


User.objects.create\u User(username=“tauri”,password=“gual”)
问题在于创建用户对象的方式

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

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

有两种选择:

1) 使用
User.objects。创建\u User
方法来处理密码哈希:

def setUp(self):
    self.user = User.objects.create_user(username='tauri', 
                                         password='gaul', 
                                         email='')
2) 或者使用
set\u password
方法设置密码:

def setUp(self):
    self.user = user = User.objects.create(username='tauri')
    user.set_password('gaul')
    user.save()

问题在于创建用户对象的方式

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

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

有两种选择:

1) 使用
User.objects。创建\u User
方法来处理密码哈希:

def setUp(self):
    self.user = User.objects.create_user(username='tauri', 
                                         password='gaul', 
                                         email='')
2) 或者使用
set\u password
方法设置密码:

def setUp(self):
    self.user = user = User.objects.create(username='tauri')
    user.set_password('gaul')
    user.save()