Ich könnte über meinen AJAX-Beitrag Hilfe bei der Einhaltung des CSRF-Schutzmechanismus von Django gebrauchen. Ich habe die Anweisungen hier befolgt:
http://docs.djangoproject.com/de/dev/ref/contrib/csrf/
Ich habe den AJAX-Beispielcode, den sie auf dieser Seite haben, genau kopiert:
http://docs.djangoproject.com/de/dev/ref/contrib/csrf/#ajax
Ich habe eine Warnung eingefügt, die den Inhalt getCookie('csrftoken')
vor dem xhr.setRequestHeader
Anruf druckt, und er ist tatsächlich mit einigen Daten gefüllt. Ich bin nicht sicher, wie ich überprüfen soll, ob das Token korrekt ist, aber ich bin ermutigt, etwas zu finden und zu senden.
Aber Django lehnt meinen AJAX-Beitrag immer noch ab.
Hier ist mein JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Hier ist der Fehler, den ich von Django sehe:
[23 / Feb / 2011 22:08:29] "POST / memorize / HTTP / 1.1" 403 2332
Ich bin mir sicher, dass mir etwas fehlt, und vielleicht ist es einfach, aber ich weiß nicht, was es ist. Ich habe mich in SO umgesehen und einige Informationen zum Deaktivieren der CSRF-Prüfung für meine Ansicht über das Internet angezeigtcsrf_exempt
Dekorateur gesehen, aber ich finde das unattraktiv. Ich habe das ausprobiert und es funktioniert, aber ich möchte lieber, dass mein POST so funktioniert, wie Django es erwartet, wenn möglich.
Nur für den Fall, dass es hilfreich ist, hier ist der Kern meiner Ansicht:
def myview(request):
profile = request.user.profile
if request.method == 'POST':
"""
Process the post...
"""
return HttpResponseRedirect('/memorize/')
else: # request.method == 'GET'
ajax = request.GET.has_key('ajax')
"""
Some irrelevent code...
"""
if ajax:
response = HttpResponse()
profile.get_stack_json(response)
return response
else:
"""
Get data to send along with the content of the page.
"""
return render_to_response('memorize/memorize.html',
""" My data """
context_instance=RequestContext(request))
Vielen Dank für Ihre Antworten!