jquery - django 1.3 中使用 jquery 和 $.post 进行 CSRF

标签 jquery django django-csrf

在 django 1.3 中,即使使用 ajax,您现在也必须使用 csrf。 我使用 jquery,现在想将 csrf token 添加到 $.post 中。我怎样才能做到这一点?我对 jquery 不是很熟练,所以最好有一个好的描述。

这是一个评级应用程序,点击星星后就会发送帖子。 我见过django docs但不明白在我的情况下该怎么办。我的代码如下:

$(function() {  
            $("#avg").children().not(":input").hide();
            $("#rating-widget").children().not("select").hide();    

            $caption = $("<span/>");

            $("#avg").stars({captionEl: $caption});
            $("#rating-widget").stars({
                inputType: "select",
                cancelShow: false,
                captionEl: $caption,
                callback: function(ui, type, value){
-------------->     $.post($("#rating-widget").attr("action"), {score: value}, function(data){

                    });
                }
            });
               $caption.appendTo("#rating-widget");

});

应该说,javascript不是在模板中,而是在静态文件中。 最好将其放入模板中,以便我可以使用 {{ csrf_token }}

提前致谢!

最佳答案

将此代码放在您的函数之前。它将处理 CSRF。

$('html').ajaxSend(function(event, xhr, settings) {
    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
        // Only send the token to relative URLs i.e. locally.
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    }
});

关于jquery - django 1.3 中使用 jquery 和 $.post 进行 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194550/

相关文章:

php - jQuery 验证submitHandler 不适用于$.ajax 发布表单数据

javascript - Jquery从url读取几个数组参数

javascript - 为什么javascript中的回调不起作用?

python - 如何使用 factory 和 faker 在 Django 中生成唯一数据?

python - token 认证 Django Rest Framework HTTPie

python - @csrf_exempt 在 Django 1.4 中停止工作

django - POST 403 Forbidden for Chrome 扩展(后端为 Django)

javascript - 使用 jQuery 为 html 表中的列添加类

python - 将 API 生成的 PDF 发送到外部服务器?

django - 如何从命令行获取 CSRF token ?