Я мог бы использовать некоторую помощь в соответствии с механизмом защиты Django 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
, и он действительно заполнен некоторыми данными. Я не знаю, как проверить правильность токена, но меня обнадеживает, что он что-то находит и отправляет.
Но Django все еще отклоняет мою публикацию AJAX.
Вот мой код JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Вот ошибка Django:
я точно скопировал образец кода 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:
я точно скопировал образец кода 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:
setRequestHeader , и он действительно заполнен некоторыми данными. Я не уверен, как проверить правильность токена, но меня обнадеживает то, что он что-то находит и отправляет.
Но Django все еще отклоняет мою публикацию AJAX.
Вот мой код JavaScript:
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Вот ошибка Django:
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 / memorize / HTTP / 1.1" 403 2332
Я уверен, что что-то упускаю, и, возможно, это просто, но я не знаю что это. Я поискал в SO и нашел информацию об отключении проверки 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))
Спасибо за ответы!