Saya dapat menggunakan beberapa bantuan yang sesuai dengan mekanisme perlindungan CSRF Django melalui pos AJAX saya. Saya telah mengikuti petunjuk di sini:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
Saya telah menyalin kode sampel AJAX yang mereka miliki di halaman itu dengan tepat:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
Saya memasang peringatan mencetak konten getCookie('csrftoken')
sebelum xhr.setRequestHeader
panggilan dan memang diisi dengan beberapa data. Saya tidak yakin bagaimana memverifikasi bahwa token itu benar, tetapi saya didorong bahwa itu menemukan dan mengirim sesuatu.
Tapi Django masih menolak posting AJAX saya.
Ini JavaScript saya:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Inilah kesalahan yang saya lihat dari Django:
[23 / Feb / 2011 22:08:29] "POST / memorize / HTTP / 1.1" 403 2332
Saya yakin saya kehilangan sesuatu, dan mungkin itu sederhana, tetapi saya tidak tahu apa itu. Saya telah mencari di sekitar SO dan melihat beberapa informasi tentang mematikan cek CSRF untuk pandangan saya melaluicsrf_exempt
dekorator, tetapi saya menemukan itu tidak menarik. Saya sudah mencobanya dan berhasil, tetapi saya lebih suka mendapatkan POST saya untuk bekerja dengan cara yang dirancang Django untuk mengharapkannya, jika memungkinkan.
Untuk berjaga-jaga jika ini membantu, inilah intisari dari pandangan saya:
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))
Terima kasih atas balasan Anda!