Django AJAX View CSRF сбой с ошибкой 500 - PullRequest
1 голос
/ 09 июля 2011

У меня есть вид Django, названный голосование.Он защищен декоратором @login_required, и при обычном использовании работает вполне нормально.

Я решил, что будет целесообразно начать изучать ajax и javascript, чтобы сделать систему более динамичной, и поэтому я реализовал кое-чтокак показано ниже для моей первой попытки:

$(function() {
        $(".vote").click(vote);
});

var vote = function() {
            pk = $(this).attr('pk');

            $.ajax({
                type: "POST",
                data: "pk=" + $(this).attr("pk"),
                url: "/link/" + $(this).attr("pk") + "/vote/",
                });
        };

, которая успешно помещает на правильный URL.Когда я смотрю на результат с firebug, я обнаруживаю, что получаю 500 ошибок.Я включил отсканированный из https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax на свои страницы, который, как я думал, решит проблему CSRF, однако, похоже, он этого не сделал.

Интересно, пропустил ли я что-то очевидное!

Спасибо!

1 Ответ

0 голосов
/ 10 июля 2011

Оказывается, я решил, что нужно привести в порядок вышеприведенное:

var vote = function() {
        pk = $(this).attr('pk');

        data = {
            'pk': pk
        };

        $.ajax({
            type: "POST",
            data: data,
            url: "/link/" + pk + "/vote/",
            });
    };

Приведенный в порядок, я затем проверил представление и обнаружил, что оно не вытягивает правильное значение из DataDict, переданного ему ajax, откуда и произошла ошибка 500.

Ранее я сталкивался с 403 из-за проблемы CSRF. Для тех, кто интересуется, как ее решить, я просто использовал скрипт, упомянутый в вопросе выше, сохраненный в файле 'csrf.js' в / static / js / каталог моего приложения, а затем включил его в качестве одного из сценариев, который затем решил эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...