doraemon的python csrf校验(国庆大更新)
Posted 番茄炒蛋548542
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了doraemon的python csrf校验(国庆大更新)相关的知识,希望对你有一定的参考价值。
### 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(), }, ``` ###
以上是关于doraemon的python csrf校验(国庆大更新)的主要内容,如果未能解决你的问题,请参考以下文章
doraemon的python ORM必会操作(国庆大更新)
doraemon的python django框架的路由详解(国庆大更新)
doraemon的python django的中间件(国庆大更新)