Ошибка проверки Django CSRF с запросом Ajax POST

Я мог бы использовать некоторую помощь в соответствии с механизмом защиты 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))

Спасибо за ответы!

175
задан juliocesar 13 April 2016 в 03:11
поделиться