Eu poderia usar alguma ajuda em conformidade com o mecanismo de proteção CSRF do Django através do meu post AJAX. Eu segui as instruções aqui:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
Copiei exatamente o código de exemplo AJAX que eles têm nessa página:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
Coloquei um alerta imprimindo o conteúdo getCookie('csrftoken')
antes da xhr.setRequestHeader
chamada e ele é realmente preenchido com alguns dados. Não sei como verificar se o token está correto, mas sou encorajado por encontrar e enviar algo.
Mas o Django ainda está rejeitando meu post no AJAX.
Aqui está o meu JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Aqui está o erro que estou vendo no Django:
[23 / fev / 2011 22:08:29] "POST / memorize / HTTP / 1.1" 403 2332
Tenho certeza de que estou perdendo alguma coisa, e talvez seja simples, mas não sei o que é. Eu pesquisei no SO e vi algumas informações sobre como desativar a verificação do CSRF para a minha visualização pelo csrf_exempt
decorador, mas acho isso desagradável. Eu tentei isso e funciona, mas eu prefiro que meu POST funcione da maneira que o Django foi projetado para esperar, se possível.
Caso isso seja útil, aqui está a essência do que minha visão está fazendo:
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))
Obrigado por suas respostas!