5 Stimmen

Wie poste ich zu einem Django 1.2 Formular mit urllib?

Ausgehend von diese andere SO Frage, ich habe versucht, urlencode und urlopen zu verwenden, um POST-Daten zu einem Formular. Allerdings gibt Django 1.2 mir eine CSRF Überprüfung fehlgeschlagen Fehler, wenn ich es verwenden. Gibt es einen Workaround?

Danke.

14voto

Manoj Govindan Punkte 68109

Der Unterschied zwischen der Übermittlung von Daten an andere Formulare und Ihrem Fall ist, dass Sie zuerst das CSRF-Token erhalten müssen. Dies können Sie tun, indem Sie zuerst eine GET-Anfrage auf der Seite durchführen und dann die csrfmiddlewaretoken unter Verwendung eines geeigneten Parsers.

Denken Sie auch daran, dass Sie eine Cookie-Dose installieren müssen, damit das funktioniert.

Zum Beispiel:

#!/usr/bin/python
import urllib, urllib2, cookielib
from BeautifulSoup import BeautifulSoup

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

url = urllib2.urlopen('http://localhost:8000/accounts/login/')
html = url.read()

doc = BeautifulSoup(html)
csrf_input = doc.find(attrs = dict(name = 'csrfmiddlewaretoken'))
csrf_token = csrf_input['value']

params = urllib.urlencode(dict(username = 'foo', password='top_secret', 
       csrfmiddlewaretoken = csrf_token))
url = urllib2.urlopen('http://localhost:8000/accounts/login/', params)
print url.read()

1voto

Ashok Punkte 10163

Verwenden Sie die csrf_exempt Dekorateur für die Ansicht, die die Anfrage bearbeitet

from django.views.decorators.csrf import csrf_exempt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X