CSRF、Ajax提交csrftoken的两种方式、CVB加装饰器方法
1、CSRF
开启 django csrf 检测功能后,需要在from 表单里加上 {% csrf_token %} ,方可用于正常提交
局部禁用 csrf 检测
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 装饰器下面的函数不在进行POST方式的csrf随机字符串检测
def csrf1(request):
pass
局部禁用 在上面基础上导入 csrf_protect
@csrf_protect
CBV 类方式。需要用django特殊的方式将装饰器加在类上面
from django.utils.decorators import method_decorator CBV 要想应用装饰器功能必须使用此模块
@method_decorator(装饰器,name='dispatch')
CBV 加装饰器方法:
1、指定方法上添加装饰器(加在函数上)
2、指定类上添加装饰器(加在类上)
@method_decorator(装饰器,name='加在那个功能上')
2、Ajax 请求 提交 csrftoken 两种方法实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="POST" action="/csrf1/">
{% csrf_token %}
<input id="user" type="text" name="user">
<input type="submit" value="提交">
<a onclick="submitForm()">Ajax提交</a>
</form>
<script src="/static/jquery-3.3.1.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
// 方法1:
// function submitForm() {
// var csrf = $('input[name="csrfmiddlewaretoken"]').val()
// var user = $("#user").val()
// $.ajax({
// url: '/csrf1/',
// type: 'POST',
// data: {'user':user,"csrfmiddlewaretoken":csrf},
// success:function(arg){
// console.log(arg)
// }
// })
//}
// 方法2: 请求头获取 token 并通过请求头发送token
function submitForm() {
var token = $.cookie('csrftoken') // 获取 token
// $.cookie('bieming','12312313') // 设置token
var user = $('#user').val()
$.ajax({
url: "/csrf1/",
type: "POST",
headers: {'X-CSRFToken':token,}, // 通过请求头发送 token
data:{"user":user},
success:function(arg) {
console.log(arg)
}
})
}
</script>
</body>
</html>

浙公网安备 33010602011771号