标签:ssd 反序列化 XML sync 生成 局部刷新 响应 json url
### 11.11 csrf装饰器 ```python from django.views.decorators.csrf import csrf_exempt,csrf_protect,ensure_csrf_cookie csrf_exempt #某个视图不需要进行csrf校验 csrf_protect #某个视图需要进行csrf校验 ensure_csrf_cookie #确保生成csrf的cookie ``` csrf功能: 1.csrf中间件中执行process_request: ? 1. 从cookie中获取到csrftoken的值 ? 2. csrftoken的值放入到 request.META 2.执行process_view 1. 查询视图函数是否使用csrf_exempt装饰器,使用了就不进行csrf的校验 2. 判断请求方式: 1. 如果是GET‘, ‘HEAD‘, ‘OPTIONS‘, ‘TRACE‘ 不进行csrf校验 2. 其他的请求方式(post,put) 进行csrf校验: 1.获取cookie中csrftoken的值 获取csrfmiddlewaretoken的值 ? 能获取到 ——》 request_csrf_token ? 获取不到 ——》 获取请求头中X-csrftoken的值 ——》request_csrf_token 比较上述request_csrf_token和cookie中csrftoken的值,比较成功接收请求,比较不成功拒绝请求。 #### 11.11.1 ajax 详情地址:https://www.cnblogs.com/maple-shaw/articles/9524153.html json的基础 json 一种数据交换的格式 python 支持的数据类型:字符串、数字、列表、字典、布尔值、None 转化:序列化 josn.dumps(python的数据) josn.dump(python的数据,f) ? 反序列化 josn.loads(json的字符串) josn.load(json的字符串,f) js 支持的数据类型:字符串、数字、数组、对象、布尔值、null 转化: 序列化:JSON.stringfy(js的数据类型) 反序列化:JSON.parse(json的字符串) ![img](https://images2018.cnblogs.com/blog/867021/201804/867021-20180407213606833-782897022.jpg) ajax的定义: AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。 特点: 1. 异步 2. 局部刷新 3. 传输的数据量少 ajax的标准格式 $.ajax({ ? url:发送的地址, ? type:请求方式, ? processData:false; //不处理编码方式 ? contentType:false; //不处理请求头 ? data:formobj, ? success:function(res){ ? 响应体 } }) jquery发ajax请求 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>AJAX局部刷新实例</title> </head> <body> <input type="text" id="i1">+ <input type="text" id="i2">= <input type="text" id="i3"> <input type="button" value="AJAX提交" id="b1"> <script src="/static/jquery-3.2.1.min.js"></script> <script> $("#b1").on("click", function () { $.ajax({ url:"/ajax_add/", type:"GET", data:{"i1":$("#i1").val(),"i2":$("#i2").val()}, success:function (data) { $("#i3").val(data); } }) }) </script> </body> </html> HTML部分代码 ``` 上传文件: ```html <input type="file" id="f1"> <button id="b1">上传</button> $(‘#b1‘).click(function () { var formobj = new FormData(); formobj.append(‘file‘,document.getElementById(‘f1‘).files[0]); /*前端里元素的获取*/ // formobj.append(‘file‘,$(‘#f1‘)[0].files[0]); formobj.append(‘name‘,‘alex‘); $.ajax({ url: ‘/upload/‘, type: ‘post‘, data:formobj , processData:false, // contentType:false, success: function (res) { $("[name=‘i3‘]").val(res) }, }) }) ``` ajax通过csrf的校验 前提条件:确保有csrftoken的cookie 在页面中使用{% csrf_token %} 加装饰器 ensure_csrf_cookie from django.views.decorators.csrf import csrf_exempt,csrf_protect, ensure_csrf_cookie 1.给data中添加csrfmiddlewaretoken的值 ```html data: { ‘csrfmiddlewaretoken‘:$(‘[name="csrfmiddlewaretoken"]‘).val(), a: $("[name=‘i1‘]").val(), b: $("[name=‘i2‘]").val(), }, ``` 2.加请求头 ```html headers:{ ‘x-csrftoken‘:$(‘[name="csrfmiddlewaretoken"]‘).val(), }, ``` ###
标签:ssd 反序列化 XML sync 生成 局部刷新 响应 json url
原文地址:https://www.cnblogs.com/doraemon548542/p/11638561.html