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的中间件(国庆大更新)

doraemon的python cookie和session(国庆大更新)

doraemon的python centos的入门

doraemon的python Flask框架 路由和配置