Frage

Ich versuche, den Testkunden mit der integrierten Anmeldefunktion zu melden. Ich versuche Unit -Testansichten und muss mich anmelden, um einige davon zu testen. Ich habe zu lange versucht, das zu tun und brauche Hilfe. Ein paar Hinweise:

create_user () erstellt einen gültigen Benutzer, der an anderen Orten verwendet wurde.

Nach dem, was ich über Client gesehen habe.login (), gibt es einen Booleschen zurück, als ich meine Tests durchführte, war der Fehler "falsch ist nicht wahr", also scheint dies richtig zu sein.

Ich habe nur erfolgreich angemeldet, indem ich Client.post ("/my/login/url", {Benutzername und Passwort in DICT}) aufzurufen was ich sehr seltsam finde.

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)

Ich habe es in Folgendes geändert:

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)

Es kann sich immer noch nicht anmelden.

Der Benutzer erstellen befindet sich in der Klasse "statisch" und hat einen user_count als 0 initialisiert. Die Funktion lautet wie folgt:

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)
War es hilfreich?

Lösung

Sie können nicht direkt auf das Passwort zugreifen. Das password Attribut wird verschlüsselt. (Sehen Passwortverwaltung in Django.)

Zum Beispiel hier die Beispielausgabe des Passworts.

>>> user = User.objects.create_user(username='asdf', email='asdf@example.com', password='xxxx')
>>> user.password
'sha1$166e7$4028738f0c0df0e7ec3cec06843c35d2b5a1aae8'

Wie du sehen kannst, user.password ist nicht xxxx Ich habe gegeben.

Ich würde ändern create_user So akzeptieren Sie den optionalen Kennwortparameter. Und übergeben ein Passwort beides an create_user, und client.login wie folgt:

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)

AKTUALISIEREN

create_user sollte nutzen User.objects.create_user Anstatt von User.objects.create. Und das erstellte Benutzerobjekt sollte zurückgegeben werden:

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 # <---
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top