zoukankan      html  css  js  c++  java
  • Django------csrf,ajax笔记

    cookie

    定义

    保存在浏览器上的一组组键值对。

    为什么有cookie?

    http协议是无状态的。每次http请求都是对立的,相互之间没有关联。用cookie保存状态。

    特性

    1. 由服务器让浏览器进行设置的。

    2. 浏览器保存在浏览器本地上。

    3. 下次访问时会自动携带相应的cookie

    django中操作cookie

    1.设置 本质 set-cookie : ‘key:value’

    ret = HttpResponse('xxxxx')

    ret.set_cookie(key , value , max_age=1000,path='/') domain secure httponly

    ret.set_signed_cookie(key , value , salt='s21' )

    1. 获取 本质 cookie : ‘’

      request.COOKIES [] get()

      request.get_signed_cookie(key,salt='s21',default='xx')

    2. 删除 set-cookie : ‘key:"" ,max-age=0’

      ret = HttpResponse('xxxxx')

      ret.delete_cookie(key)

       

    session

    定义

    保存在服务器上的一组组键值对,必须依赖cookie

    为什么要有session?

    1. cookie保存在浏览器本地,不安全

    2. cookie的大小受到限制

    django中操作session

    1.设置:

    request.session[key] = value

    2.获取

    request.session[key] request.session.get(key)

    3.删除

    del request.session[key] request.session.pop(key)

    request.session.delete() # 删除session的数据 不删除cookie

    request.session.flush() # 删除session的数据 删除cookie

    4.其他

    request.session.session_key

    request.session.set_expiry(value)

    request.session.clear_expiried()

    5.配置

    存放session的位置 db

    SESSION_SAVE_EVERY_REQUEST = False

    from django.conf import global_settings

    今天内容

    1.csrf装饰器

    from django.views.decorators.csrf import csrf_exempt,csrf_protect,ensure_csrf_cookie
    csrf_exempt   某个视图不需要进行csrf校验
    csrf_protect 某个视图需要进行csrf校验
    ensure_csrf_cookie 确保生成csrf的cookie

    2.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校验

        1. 其他的请求方式(post,put)

        进行csrf校验:

        1.获取cookie中csrftoken的值

        获取csrfmiddlewaretoken的值

        能获取到 ——》 request_csrf_token

        获取不到 ——》 获取请求头中X-csrftoken的值 ——》request_csrf_token

        比较上述request_csrf_token和cookie中csrftoken的值,比较成功接收请求,比较不成功拒绝请求。

    3.ajax

    https://www.cnblogs.com/maple-shaw/articles/9524153.html

    1.发请求的方式

    1.地址栏输入地址 GET

    2.form表单 GET/POST

    3.a标签 GET

    2.ajax

    就是使用js的技术发请求和接收响应的。

    特点:

    1. 异步

    2. 局部刷新

    3. 传输的数据量少

    3.jqery发ajax请求

    $.ajax({
      url: '/calc/',
      type: 'post',
      data: {
          a: $("[name='i1']").val(),
          b: $("[name='i2']").val(),
      },
      success: function (res) {
          $("[name='i3']").val(res)
      },
      error:function (error) {
          console.log(error)
      }
    })

    4.上传文件:

    <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)
              },
          })
      })

    5.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的值

    data: {
      'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val(),
      a: $("[name='i1']").val(),
      b: $("[name='i2']").val(),
    },

    2.加请求头

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

    3.使用文件

    同方式2

    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的字符串)

    from django.http.response import JsonResponse

    发请求的方式

    1.在地址栏种输入地址 GET

    2.a标签 GET

    3.form表单 GET/POST

    1. method   请求方式  action  地址
    1. 标签要有name属性 有的需要有value

    2. 要有一个input type=‘submit’ 或者button

    ajax

    使用js发送请求。

    特点:异步 局部刷新 传输的数据量小

    使用

    jq发ajax

    导入jq

    $.ajax({

    url:发送的地址,

    type: 请求方式,

    data: {},

    successs: funcation(res){ res ——>响应体

    }

    })

    上传文件

    var formobj = new FormData()

    formobj.append(key, $("#f1")[0].files[0] )

    $.ajax({

    url:发送的地址,

    type: 请求方式,

    processData: false; // 不处理编码方式

    contentType:false; // 不处理请求头

    data: formobj ,

    successs: funcation(res){ res ——>响应体

    }

    })

    ajax通过django的csrf校验

    1.给data添加csrfmiddlewaretoken的键值对

    dada:{
    'csrfmiddlewaretoken': 隐藏的input的值   cookie中csrftoken的值
    }

    2.添加请求头

    hearders:{ 'x-csrftoken': 隐藏的input的值 cookie中csrftoken的值 }

    3.文件导入

  • 相关阅读:
    Socket
    剑指 Offer 14- I. 剪绳子
    剑指 Offer 29. 顺时针打印矩阵
    判断二分图
    vue生命周期以及常用标签
    滑动窗口
    二叉树
    常用算法
    动态规划
    蓄水池抽样
  • 原文地址:https://www.cnblogs.com/anthony-wang0228/p/11096990.html
Copyright © 2011-2022 走看看