Je pourrais utiliser un peu d'aide pour me conformer au mécanisme de protection CSRF de Django via mon article AJAX. J'ai suivi les instructions ici:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
J'ai copié exactement l'exemple de code AJAX qu'ils ont sur cette page:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
J'ai mis une alerte imprimant le contenu de getCookie('csrftoken')
avant l' xhr.setRequestHeader
appel et elle est en effet peuplée de quelques données. Je ne sais pas comment vérifier que le jeton est correct, mais je suis encouragé qu'il trouve et envoie quelque chose.
Mais Django rejette toujours mon message AJAX.
Voici mon JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Voici l'erreur que je vois de Django:
[23 / février / 2011 22:08:29] "POST / memorize / HTTP / 1.1" 403 2332
Je suis sûr qu'il me manque quelque chose, et c'est peut-être simple, mais je ne sais pas ce que c'est. J'ai cherché autour de SO et j'ai vu des informations sur la désactivation du contrôle CSRF pour ma vue via le csrf_exempt
décorateur, mais je trouve cela peu attrayant. J'ai essayé cela et cela fonctionne, mais je préfère que mon POST fonctionne comme Django a été conçu pour s'y attendre, si possible.
Juste au cas où cela serait utile, voici l'essentiel de ce que fait mon point de vue:
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))
Merci pour vos réponses!