У меня проблемы с тестом Django - PullRequest
0 голосов
/ 28 марта 2010

У меня есть этот контрольный пример

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 ]

4 голосов
/ 28 марта 2010

Проблема в том, как вы создаете свой объект User.

Django не хранит ваш пароль в виде обычного текста в базе данных, он хранит его хэш-значение. Но в вашем коде пароль задан в виде обычного текста.

Таким образом, когда вы используете c.login(...) внутри, Django вызовет метод check_password, который сгенерирует хеш-значение из пароля, который вы передали, и сравнит его с паролем, сохраненным в базе данных, и в результате вернет False потому что 'gaul' из DB не равен 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 голос
/ 28 марта 2010

Удалось ли создать пользовательскую запись в функции setUp?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...