ajax:
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()},
方式三:
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号