Я міг би скористатись допомогою, що відповідає механізму захисту Джанго CSRF через мій пост у 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
викликом, і він справді заповнений деякими даними. Я не впевнений, як перевірити, що маркер правильний, але мені сподобається, що він щось знаходить і надсилає.
Але Джанго досі відкидає мій пост у AJAX.
Ось мій JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Ось помилка, яку я бачу від Django:
[23 / лют / 2011 22:08:29] "POST / запам'ятати / HTTP / 1.1" 403 2332
Я впевнений, що мені щось не вистачає, і, можливо, це просто, але я не знаю, що це. Я обшукав SO і побачив деяку інформацію про вимкнення перевірки CSRF на мій погляд через csrf_exempt
декоратор, але вважаю це непривабливим. Я спробував це, і це працює, але я б швидше змусив свою пошту працювати так, як Джанго був розроблений, щоб очікувати цього, якщо це можливо.
На випадок, якщо це корисно, ось суть мого погляду:
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))
Дякуємо за відповіді!