zoukankan      html  css  js  c++  java
  • 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(),
    },
    ```
    
    ### 
  • 相关阅读:
    Java中equals和==的区别
    Golang 中的 defer 关键字
    浅拷贝与深拷贝
    svn 忽略某些文件夹或者文件类型
    使用 nvm 管理 nodejs 版本
    数据库索引
    解决 vscode 安装 golang 环境出现 connection failed 的情况
    TSQL 如何批量修改/转移大数据量数据.
    从别人那儿陶的一个配置文件处理方法.
    分析sqlserver查询计划
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11638561.html
Copyright © 2011-2022 走看看