Je pourrais utiliser un peu d'aide conformité avec Django csrf mécanisme de protection par l'intermédiaire de mon AJAX post. J'ai suivi les instructions ici:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
J'ai copié l'AJAX exemple de code qu'ils ont sur cette page exactement:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
J'ai mis une alerte de l'impression de getCookie('csrftoken") devant le xhr.setRequestHeader appel et c'est effectivement rempli avec quelques-unes des données. Je ne suis pas sûr de la façon de vérifier que le jeton est correct, mais je suis encouragé par le fait que c'est de la trouver et de l'envoi de quelque chose.
Mais django est toujours en rejetant ma AJAX post.
Voici mon code 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év/2011 22:08:29] "POST /mémoriser/ HTTP/1.1" 403 2332
Je suis sûr que je suis absent quelque chose, et c'est peut-être simple, mais je ne sais pas ce que c'est. J'ai cherché autour de SORTE et j'ai vu quelques informations sur la désactivation des CSRF vérifier ma vue par la csrf_exempt décorateur, mais je trouve que désagréable. J'ai essayé et cela fonctionne, mais je préfère obtenir mon POSTE de travail, la façon de Django a été conçu pour l'attendre, si possible.
Juste au cas où il est utile, voici l'essentiel de ce que mon point de vue est en train de faire:
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!