मैं अपने AJAX पोस्ट के माध्यम से Django के CSRF सुरक्षा तंत्र के अनुपालन में कुछ मदद का उपयोग कर सकता हूं। मैंने यहां निर्देशों का पालन किया है:
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 पोस्ट को अस्वीकार कर रहा है।
यहाँ मेरा जावास्क्रिप्ट है:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
यहाँ त्रुटि मैं Django से देख रहा हूँ:
[२३ / फरवरी / २०११ २२-०२:२ ९] "पोस्ट / याद / HTTP / १.१" ४०३ २३३२
मुझे यकीन है कि मैं कुछ याद कर रहा हूं, और शायद यह सरल है, लेकिन मुझे नहीं पता कि यह क्या है। मैंने एसओ के आसपास खोज की है और 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))
आपके उत्तर के लिए धन्यवाद!