AJAX yazı ile Django CSRF koruma mekanizması ile uyumlu bazı yardım kullanabilirsiniz. Buradaki talimatları takip ettim:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
Ben tam olarak bu sayfada sahip AJAX örnek kod kopyaladım:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
Aramadan getCookie('csrftoken')
önce içeriğini yazdıran bir uyarı koydum xhr.setRequestHeader
ve gerçekten bazı verilerle dolduruldu. Simgenin doğru olduğunu nasıl doğrulayacağımdan emin değilim, ancak bir şey bulması ve göndermesi teşvik ediliyor.
Ancak Django hala AJAX gönderimi reddediyor.
İşte benim JavaScript'im:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
İşte Django'dan gördüğüm hata:
[23 / Şub / 2011 22:08:29] "POST / ezberle / HTTP / 1.1" 403 2332
Eminim bir şeyleri kaçırıyorum ve belki de basit, ama ne olduğunu bilmiyorum. SO etrafında arama yaptım ve csrf_exempt
dekoratör aracılığıyla görüşümü için CSRF kontrolünü kapatma hakkında bazı bilgiler gördüm , ama bu hoş bulmuyorum. Bunu denedim ve işe yarıyor, ancak POST'umu mümkünse Django'nun beklediği şekilde tasarlamayı tercih ediyorum.
Her ne kadar yararlı olursa, işte benim görüşümün özü:
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))
Cevaplarınız için teşekkürler!