• ajax:


    AJAX

    js技术,发送请求的一种方式.

    特点:

     1. 异步
    1. 局部刷新

    2. 传输的数据量小

     $.ajax({
         url: '/test/',   // url路径
         type: 'post',    // 请求方式
         data: {          // 请求数据
             name: 'alex',
             age: 84,
             hobby: JSON.stringify(['吐口水', 'TESA', '姑娘', '毒鸡汤']),
        },
         success: function (res) {   // 响应成功的回调函数
             console.log(res);
             console.log(res.status);
             console.log(typeof(res))
        },
         error:function (res) { // 响应失败的回调函数
             console.log(res)
     
        }
     })

     

    上传文件

     $('#b1').click(function () {
     
             var form_obj = new FormData();  // enctype="multipart/form-data"
             form_obj.append('name', 'alex')
             form_obj.append('f1', $('#f1')[0].files[0])
     
             $.ajax({
                 url: '/upload/',
                 type: 'post',
                 data: form_obj,
                 processData: false, // 不需要处理编码方式
                 contentType: false, // 不需要处理contentType请求头
                 success:function (res) {
                     alert(res)
                }
     
            })
        })

     

    CSRF中间件

    1. process_request方法:

      从cookie中获取csrftoken的值,放到request.META中

    2. process_view方法:

      1. 判断视图是否使用csrf_exempt装饰器,使用了就不校验

      2. 判断请求方式是否是'GET', 'HEAD', 'OPTIONS', 'TRACE',如果是,也不校验

      3. 进行校验:

        1. csrf_token = request.META.get('CSRF_COOKIE') # cookie中获取csrftoken的值

      4. 请求方式是POST

        1. request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')

        2. 获取不到,从头中获取x-csrftoken的值 = >request_csrf_token

        3. 进行比较csrf_token request_csrf_token的值:

          1. 对比成功 接收请求

          2. 对比不成功 拒绝请求

     

    前提

    有csrftoken的cookie:

    1. {% csrf_token %}

    2.  from django.views.decorators.csrf ensure_csrf_cookie

    方式一:

    给data中添加csrfmiddlewaretoken的键值对

    方式二:

    给headers添加x-csrftoken的键值对

     headers: { 
     'x-csrftoken': $('[name="csrfmiddlewaretoken"]').val()},

    方式三:

    导入文件

  • 相关阅读:
    二叉树专题
    强化学习的几个基本概念
    LeetCode #111 二叉树的最小深度
    NC127 最长公共子串
    快速排序
    NC78 反转链表
    《合作的进化》读后总结
    Optional和Stream的map与flatMap
    最爱的小工具,谁用谁知道!
    SpringBoot应用启动过程分析
  • 原文地址:https://www.cnblogs.com/zhang-da/p/12109511.html
Copyright © 2020-2023  润新知