在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