2013-11-07 3 views
15

Я пытаюсь войти в тестовый клиент, используя встроенную функцию входа. Я пытаюсь объединить тестовые представления и вам нужно войти в систему, чтобы проверить некоторые из них. Я пытался сделать это слишком долго и нуждаюсь в помощи. Несколько примечаний:Django test client не регистрируется

create_user() действительно создает действительного пользователя, он использовался в других местах.

Из того, что я видел о client.login(), он возвращает логическое значение, когда я запускал свои тесты, сбой был «False is not True», поэтому это выглядит правильно.

Единственный способ, с которым я успешно зарегистрировался, - позвонить по адресу client.post ("/ my/login/url", {имя пользователя и пароль в dict.}) Однако по какой-либо причине он не остается включенным в систему все мои тестовые примеры, которые я считаю ОЧЕНЬ странными.

def setUp(self): 
    """ 
    Initializes the test client and logs it in. 
    """ 
    self.user = create_user() 
    self.logged_in = self.client.login(username=self.user.username, password=self.user.password) 

def test_valid(self): 
    self.assertTrue(self.logged_in) 

я изменил его к следующему:.

def setUp(self): 
    """ 
    Initializes the test client and logs it in. 
    """ 
    self.password = "password" 
    self.user = create_user(password=self.password) 
    self.logged_in = self.client.login(username=self.user.username, password=self.password) 

Он по-прежнему не удается войти в

создать пользователя в классе «Static» и имеет user_count инициализируются как 0, функция такова:

def create_user(username=None, password=None, email=None, is_superuser=False): 
    if username is None: 
     username = "user%d" % Static.user_count 
     while User.objects.filter(username=username).count() != 0: 
      Static.user_count += 1 
      username = "user%d" % Static.user_count 
    if password is None: 
     password = "password" 
    if email is None: 
     email="user%[email protected]" % Static.user_count 

    Static.user_count += 1 
    user = User.objects.create(username=username, password=password, is_superuser=is_superuser) 

ответ

21

Вы не можете получить доступ к паролю напрямую. Атрибут password зашифрован. (См. Password management in Django.)

Например, здесь образец вывода пароля.

>>> user = User.objects.create_user(username='asdf', email='[email protected]', password='xxxx') 
>>> user.password 
'sha1$166e7$4028738f0c0df0e7ec3cec06843c35d2b5a1aae8' 

Как вы можете видеть, user.password не xxxx я дал.

Я бы изменил create_user, чтобы принять необязательный параметр пароля. И передать пароль как на create_user и client.login следующим образом:

def setUp(self): 
    """ 
    Initializes the test client and logs it in. 
    """ 
    password = 'secret' 
    self.user = create_user(password=password) 
    self.logged_in = self.client.login(username=self.user.username, password=password) 

UPDATE

create_userUser.objects.create_user следует использовать вместо User.objects.create. И созданный пользовательский объект должен быть возвращен:

+0

Так есть способ получить пароль от пользователя? Или я просто должен знать пароль? – mdw7326

+0

@ user2278110, Как уже упоминалось в ответе, пароль шифруется (хешируется) и не может быть расшифрован. Вы должны передать его 'create_user' (возможно, нужно внести изменения в' create_user') и использовать этот пароль вместо 'self.user.password'. – falsetru

+0

Я отредактировал мой код (показано выше), и он все равно не работает – mdw7326

Смежные вопросы