Вопрос

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

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

Из того, что я видел в Client.Login (), он возвращает логическое, когда я прошел свои тесты, сбой был «ложь неправда», так что это кажется правильным.

Единственный способ, которым я успешно вошел в систему, - это позвонить 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)

Это все еще не входит в систему.

Создание пользователя находится в классе «статично» и имеет инициализированную 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%d@test.com" % Static.user_count

    Static.user_count += 1
    user = User.objects.create(username=username, password=password,   is_superuser=is_superuser)
Это было полезно?

Решение

Вы не можете получить доступ к паролю напрямую. А password Атрибут зашифрован. (Видеть Управление паролем в Джанго.)

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

>>> user = User.objects.create_user(username='asdf', email='asdf@example.com', 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)

ОБНОВИТЬ

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

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%d@test.com" % Static.user_count

    Static.user_count += 1
    user = User.objects.create_user(username=username, password=password)
    #                   ^^^^^^^^^^^
    user.is_superuser = is_superuser
    user.save()
    return user # <---
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top