带有jquery的CSRF和django 1.3中的$.post

前端之家收集整理的这篇文章主要介绍了带有jquery的CSRF和django 1.3中的$.post前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
django 1.3中,你现在必须使用csrf甚至是ajax.
我使用 jquery,现在我想将csrf标记添加到$.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相关文章