开发者

I am having issues with django test

I have this test case

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)

the view associated with the test case is this

@login_required
def student(request):
    return render_to_response('student/controlpanel.html')

so my question is why the above test case redire开发者_Python百科cts user to login page? should not c.login suppose to take care authenticating user?


The problem is the way you create your User object.

Django does not store your password in plain text in the database, it stores its hash value. But in your code password is set in plain text.

So when you use c.login(...) internally Django will make a call to check_password method which will generate a hash value from the password you passed and will compare it to the password stored in the database and as a result will return False because 'gaul' from DB is not equal to get_hexdigest('gaul')

There are two options:

1) Use a User.objects.create_user method that will take care of password hashing:

def setUp(self):
    self.user = User.objects.create_user(username='tauri', 
                                         password='gaul', 
                                         email='')

2) Or set a password with a set_password method:

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


Did you make sure to create the user entry in your setUp function?

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜