django之 csrf

在django中 csrf相当于中间件,CSRF的作用则是对请求进行一次验证,目的是为用户实现防止跨站请求伪造的功能。对于django中设置防跨站请求伪造功能有分为全局和局部。
相对应的对于form表单以POST提交方式而言,需要携带csrf随机字符串才能拿通过,在html界面中需要添加这样。

{% csrf_token %}
加上一句{%csrf_token%},浏览器会生成随机验证字符已通过csrf验证。 对于ajax请求

则需要添加上这样一句 headers: {
‘X-CSRFtoken’:$.cookie(‘csrftoken’)},

 function tt() {
        $.ajax({
            url: '/update/',
            type: 'POST',
            headers: {'X-CSRFtoken': $.cookie('csrftoken')},
           data: {
                'id': $('#0').val(),
                'name': $('#1').val(),
                'team': $('#2').val(),
                'number': $("#3").val(),
                'score': $("#4").val()
            },
            success: function (data) {
                alert(data)
            }
        })
}

当页面有许多ajax请求时,可以加上这一句,则ajax请求则不用在添加请求头。

 $.ajaxSetup({
            beforeSend:function (xhr,settings) {
                xhr.setRequestHeader("X-CSRFtoken",$.cookie("csrftoken"))
            }
        });

对于get请求,则没有要求。
同样django提供全局和部分的csrf,对于部分需要添加csrf验证的我们可以添加@csrf_protect装饰器。
对于不需要的可以添加@csrf_exempt装饰器

from django.views.decorators.csrf import csrf_exempt,csrf_protect

你可能感兴趣的:(django)