AJAX
js技术,发送请求的一种方式.
特点:
1. 异步
-
局部刷新
-
传输的数据量小
$.ajax({
url: '/test/', // url路径
type: 'post', // 请求方式
data: { // 请求数据
name: 'alex',
age: 84,
hobby: JSON.stringify(['吐口水', 'TESA', '姑娘', '毒鸡汤']),
},
success: function (res) { // 响应成功的回调函数
console.log(res);
console.log(res.status);
console.log(typeof(res))
},
error:function (res) { // 响应失败的回调函数
console.log(res)
}
})
上传文件
$('#b1').click(function () {
var form_obj = new FormData(); // enctype="multipart/form-data"
form_obj.append('name', 'alex')
form_obj.append('f1', $('#f1')[0].files[0])
$.ajax({
url: '/upload/',
type: 'post',
data: form_obj,
processData: false, // 不需要处理编码方式
contentType: false, // 不需要处理contentType请求头
success:function (res) {
alert(res)
}
})
})
CSRF中间件
-
process_request方法:
从cookie中获取csrftoken的值,放到request.META中
-
process_view方法:
-
判断视图是否使用csrf_exempt装饰器,使用了就不校验
-
判断请求方式是否是'GET', 'HEAD', 'OPTIONS', 'TRACE',如果是,也不校验
-
进行校验:
-
csrf_token = request.META.get('CSRF_COOKIE') # cookie中获取csrftoken的值
-
-
请求方式是POST
-
request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')
-
获取不到,从头中获取x-csrftoken的值 = >request_csrf_token
-
进行比较csrf_token request_csrf_token的值:
-
对比成功 接收请求
-
对比不成功 拒绝请求
-
-
-
前提
有csrftoken的cookie:
-
{% csrf_token %}
-
from django.views.decorators.csrf ensure_csrf_cookie
方式一:
给data中添加csrfmiddlewaretoken的键值对
方式二:
给headers添加x-csrftoken的键值对
headers: {
'x-csrftoken': $('[name="csrfmiddlewaretoken"]').val()},
方式三: