Ich arbeite an einer Django-Web-Anwendung, die (unter anderem) Transaktionsstatusinformationen verarbeiten muss, die mit einer POST
Anfrage gesendet werden.Einstellung HTTP_REFERER-Header in Django-Test
Neben der von der Payment-Gateway unterstützt HTTP Sicherheit, meiner Meinung nach überprüft request.META['HTTP_REFERER']
gegen einen Eintrag in settings.py
versuchen lustiges Geschäft zu verhindern:
if request.META.get('HTTP_REFERER', '') != settings.PAYMENT_URL and not settings.DEBUG:
return HttpResponseForbidden('Incorrect source URL for updating payment status')
Nun möchte Ich mag, wie arbeiten, testen dieses Verhalten.
Ich kann einen Fehler leicht genug erzeugen; HTTP_REFERER
ist (vorhersagbar) None
mit einer normalen Seite zu laden:
def test_transaction_status_succeeds(self):
response = self.client.post(reverse('transaction_status'), { ... })
self.assertEqual(response.status_code, 403)
Wie aber kann ich fälschen erfolgreiche Einreichung? Ich habe versucht, HTTP_REFERER
in extra
, z.self.client.post(..., extra={'HTTP_REFERER': 'http://foo/bar'})
, aber das funktioniert nicht; Die Ansicht sieht anscheinend immer noch einen leeren Header.
Unterstützt der Testclient sogar benutzerdefinierte Header? Gibt es einen Workaround, wenn nicht? Ich benutze Django 1.1 und würde es vorziehen, wenn überhaupt nicht zu aktualisieren.
Das war nicht dein Problem, aber für andere, die die Schwierigkeiten hatten, die ich hatte: Django erkannte die Header nicht, weil ich ihre Namen nicht richtig als dokumentiert [hier] umwandelte (https: // docs. djangoproject.com/de/1.6/topics/testing/tools/#django.test.client.Client.get), wie [beschrieben die CGI-Spezifikation] (http://tools.ietf.org/html/draft-robinson- www-interface-00 # Seite-8). Zum Beispiel wäre 'X-CSRFToken'' HTTP_X_CSRFTOKEN'. Nachdem ich sie transformiert hatte, konnte ich sie einfach als Kwargs verwenden, wie in der Antwort von Supervacuo unten. –