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: p> Malheureusement, cela échoue avec: p> 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? P> P>
5 Réponses :
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)
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 Donc au lieu de: p> requéreur Code> pour construire une demande que vous pouvez définir le cookie, puis passer directement à la vue en question. request = RequestFactory().get('/contact/')
request.COOKIES['thing'] = 'whatever'
response = contact_view(request)
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 ()) code>
hoche la tête i> - bon point. J'utilisais 1.4 dans ce cas. Merci pour le conseil!
Si vous êtes ici à RF.POST CODE> Bypassing Check CSRF, ce thread GITUB.COM/ENCODE/DJANGO-REST-Framework/issues/957 m'a montré utiliser demande._dont_enforce_csrf_checks = true code>.
C'est une ancienne question, mais peut-être que cela est pratique pour quelqu'un:
Cette réponse utilise la bibliothèque Python 3 http.cokies. Dans Python 2, utilisez cookie code>. docs.python.org/2/library/cookie.html
Aucune de ces réponses a fonctionné pour moi (Django1.9, Python3.4). Trouvé cette solution ici : < Pré> xxx pré> p>
Pour faire ce travail à la fois py2 et py3, vous pouvez simplement utiliser de django.http.cookie importation SimpleCookie code> :)
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')
})