11
votes

Django: Définissez Cookie sur le client de test?

Mon site Django est configuré avec du middleware qui sur chaque requête, vérifie un cookie et s'il n'est pas défini, transfère l'utilisateur ailleurs.

Je veux maintenant exécuter des tests sur le site. Ceci est mon code: xxx

Malheureusement, cela échoue avec: xxx

puis-je soit (i) définir un cookie Sur le client de test Django (et si oui comment) ou (ii) exiger que le client de test Django suive la redirection et le test de la page finale?


0 commentaires

5 Réponses :


7
votes

Le Client.get Code> Méthode prend un Suivez code> argument qui lui permet de suivre les redirections:

response = self.client.get('/contact/', follow=True)


0 commentaires

9
votes

Alors que la réponse acceptée est la bonne approche de ce problème, je veux simplement souligner que vous peut em> définir des cookies directement (c.-à-d. Numéro d'approche (i) comme vous l'appelez), mais pas via le client de test. Au lieu de cela, vous devez utiliser un requéreur Code> pour construire une demande que vous pouvez définir le cookie, puis passer directement à la vue en question.

Donc au lieu de: p>

request = RequestFactory().get('/contact/')
request.COOKIES['thing'] = 'whatever'
response = contact_view(request)


3 commentaires

Quelle version de Django utilisiez-vous? Dans 1.7, vous pouvez définir des cookies comme celui-ci sur une demande: self.client.get ('xyz', cookies = cookie.simplecookie ())


hoche la tête - bon point. J'utilisais 1.4 dans ce cas. Merci pour le conseil!


Si vous êtes ici à RF.POST Bypassing Check CSRF, ce thread GITUB.COM/ENCODE/DJANGO-REST-Framework/issues/957 m'a montré utiliser demande._dont_enforce_csrf_checks = true .



3
votes

C'est une ancienne question, mais peut-être que cela est pratique pour quelqu'un: xxx


1 commentaires

Cette réponse utilise la bibliothèque Python 3 http.cokies. Dans Python 2, utilisez cookie . docs.python.org/2/library/cookie.html



18
votes

Aucune de ces réponses a fonctionné pour moi (Django1.9, Python3.4). Trouvé cette solution ici : < Pré> xxx


1 commentaires

Pour faire ce travail à la fois py2 et py3, vous pouvez simplement utiliser de django.http.cookie importation SimpleCookie :)



6
votes

Vous pouvez définir des cookies pour tester le client en appelant la charge sur cookies code> attribut qui est SimpleCookie objet.

from django.core import signing

self.client.cookies.load({
    'example': '123',
    'signed_example': signing.get_cookie_signer('signed_example').sign('123')
})


0 commentaires