Question

J'essaie de me connecter au client de test en utilisant sa fonction de connexion intégrée. J'essaie de tester les vues de test et je dois me connecter pour en tester certains. J'essaie de faire cela depuis trop longtemps et j'ai besoin d'aide. Quelques notes:

create_user () crée un utilisateur valide, il a été utilisé dans d'autres emplacements.

D'après ce que j'ai vu sur client.login (), il renvoie un booléen, lorsque j'ai effectué mes tests, l'échec était "faux n'est pas vrai", donc cela semble correct.

La seule façon dont je me suis connecté est en appelant Client.Post ("/ mon / login / url", {nom d'utilisateur et mot de passe dans Dict.}) Cependant, pour une raison quelconque, il ne reste pas connecté pour tous mes cas de test que je trouve très étrange.

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)

Je l'ai changé en ce qui suit:

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)

Il ne parvient toujours pas à se connecter.

Créer que l'utilisateur est en classe "statique" et a un user_count initialisé comme 0, la fonction est la suivante:

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)
Était-ce utile?

La solution

Vous ne pouvez pas accéder directement au mot de passe. La password L'attribut est crypté. (Voir Gestion des mots de passe à Django.)

Par exemple, ici un exemple de sortie de mot de passe.

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

Comme tu peux le voir, user.password n'est pas xxxx J'ai donné.

Je modifierais create_user Pour accepter le paramètre de mot de passe facultatif. Et passer un mot de passe à la fois à create_user, et client.login comme suit:

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)

METTRE À JOUR

create_user devrait utiliser User.objects.create_user à la place de User.objects.create. Et l'objet utilisateur créé doit être renvoyé:

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 # <---
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top