django之 csrf

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

<form action="/add/" method="post">
    {% csrf_token %}
    <input type="text" name="play_name" placeholder="球员姓名">
    <input type="text" name="play_team" placeholder="效力球队" >
    <input type="text" name="pl" placeholder="球员号码">
    <input type="text" name="score" placeholder="场均得分">
    <input type="submit" value="提交">
</form>
加上一句{%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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值