ฉันสามารถใช้ความช่วยเหลือเพื่อให้สอดคล้องกับกลไกการป้องกัน CSRF ของ Django ผ่านทางโพสต์ AJAX ของฉัน ฉันได้ทำตามคำแนะนำที่นี่:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
ฉันได้คัดลอกโค้ดตัวอย่าง AJAX ที่มีในหน้านั้นอย่างแน่นอน:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
ฉันใส่การแจ้งเตือนการพิมพ์เนื้อหาของgetCookie('csrftoken')
ก่อนxhr.setRequestHeader
โทรและมันแน่นอนมีประชากรด้วยข้อมูลบางอย่าง ฉันไม่แน่ใจว่าจะยืนยันได้อย่างไรว่าโทเค็นนั้นถูกต้อง แต่ฉันขอแนะนำให้หาและส่งบางสิ่งบางอย่าง
แต่ Django ยังคงปฏิเสธโพสต์ AJAX ของฉัน
นี่คือ JavaScript ของฉัน:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
นี่เป็นข้อผิดพลาดที่ฉันเห็นจาก Django:
[23 / Feb / 2011 22:08:29] "POST / จดจำ / HTTP / 1.1" 403 2332
ฉันแน่ใจว่าฉันพลาดบางสิ่งบางอย่างและอาจจะง่าย แต่ฉันไม่รู้ว่ามันคืออะไร ฉันค้นหารอบ ๆ และเห็นข้อมูลบางอย่างเกี่ยวกับการปิดการตรวจสอบ CSRF สำหรับมุมมองของฉันผ่านทางcsrf_exempt
มัณฑนากร แต่ฉันพบว่าไม่น่าสนใจ ฉันลองแล้วมันใช้งานได้ แต่ฉันอยากให้ POST ทำงานตามวิธีที่ Django ออกแบบมาเพื่อคาดหวังถ้าเป็นไปได้
ในกรณีที่เป็นประโยชน์นี่เป็นส่วนสำคัญของสิ่งที่ฉันทำมุมมอง:
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))
ขอบคุณสำหรับคำตอบของคุณ!