Проверка Django CSRF не удалась с помощью запроса Ajax POSTPython

Программы на Python
Ответить
Anonymous
 Проверка Django CSRF не удалась с помощью запроса Ajax POST

Сообщение Anonymous »

Мне могла бы пригодиться помощь в обеспечении соответствия механизму защиты Django CSRF через мой пост AJAX. Я следовал инструкциям здесь:

http://docs.djangoproject.com/en/dev/ref/contrib/csrf/

Я в точности скопировал пример кода AJAX, который есть на этой странице:

http://docs.djangoproject.com/en/dev/re ... 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 /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))
Спасибо за ответы!

Подробнее здесь: https://stackoverflow.com/questions/510 ... st-request
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»