码迷,mamicode.com
首页 > 编程语言 > 详细

doraemon的python csrf校验(国庆大更新)

时间:2019-10-08 23:52:54      阅读:115      评论:0      收藏:0      [点我收藏+]

标签: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(),
},
```

### 

 

doraemon的python csrf校验(国庆大更新)

标签:ssd   反序列化   XML   sync   生成   局部刷新   响应   json   url   

原文地址:https://www.cnblogs.com/doraemon548542/p/11638561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!