码迷,mamicode.com
首页 > Web开发 > 详细

Django 如何让ajax的POST方法带上CSRF令牌

时间:2018-05-28 13:48:57      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:前端   asc   with   cti   script   post   作用   main   split   

大家知道,在大前端领域,有一种叫做ajax的东东,即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),它被用来在不刷新页面的情况下,提交和请求数据。如果Django服务器接收的是一个通过ajax发送过来的POST请求的话,那么将很麻烦。何也?因为在ajax中,没有办法像form表单中那样携带{% csrf_token %}令牌。那怎么办呢?好办!在你的前端模版的JavaScript代码处,添加下面的代码:

// 使用jQuery库
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;
}
var csrftoken = getCookie(‘csrftoken‘);

function csrfSafeMethod(method) {
    // 这些HTTP方法不要求CSRF包含
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

上面代码的作用就是让你的ajax的POST方法带上CSRF需要的令牌,它依赖jQuery库,必须提前加载jQuery。这也是Django官方提供的解决方案,请参考。

 

  至此。

Django 如何让ajax的POST方法带上CSRF令牌

标签:前端   asc   with   cti   script   post   作用   main   split   

原文地址:https://www.cnblogs.com/wcwnina/p/9099561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!