django_day06

内容回顾

  1. 事务
try:
with transaction.atomic():
#事务
#一系列的操作
pass
except Exception as e:
print(e)
  1. cookie

    1. 是什么?保存在浏览器本地的一组组键值对

    2. 为什么要使用cookie?

      1. Http协议时无状态协议 每次请求之间都是相互独立的 没有办法保存状态 使用cookie保存状态
      2. 特征:
        1. 由服务器让浏览器设置的
        2. 浏览器把键值对保存在本地 本权不保存
        3. 下次访问时会自动携带对应的cookie
    3. django中操作cookie

      #设置cookie  响应头 set=cookie
      ret = HttpResponse('xx')
      ret.set_cookie(key,value,max_age=5,path='/')
      ret.set_signed_cookie(key,value,max_age=5,path='/',salt='xxx')
      #获取cookie
      request.COOKIES {} [key] .get(key)
      request.get_signed_cookie(key,salt='xxx',default='') #删除cookie set=cookie key:'' max_age = 0
      ret = HttpResponse('xx')
      ret.delete_cookie(key)

session

  1. 保存在服务器上的一组组键值对,依赖于cookie使用

  2. 为什么使用session?

    1. cookie是保存在浏览器本地,不太安全
    2. 浏览器会对cookie的大小和个数有一定的限制
  3. django中操作session

    #设置session
    request.session[key] = value
    #获取
    request.session[key] request.session.get(key) #删除
    del request.session[key]
    request.session.pop(key) #将所有session 失效日期小于当前日期的数据删除
    request.session.clear_expired()
    #删除当前用户的所有session数据
    request.session.delete() #不删除cookie
    request.session.flush() #删除cookie

4. 配置 ```python
SESSION_COOKIE_NAME = 'session'
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
SESSION_SAVE_EVERY_REQUEST = True #每次请求后更新超时时间
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 关闭浏览器cookie就失效
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
#session保存的位置
#默认是数据库 缓存 缓存+数据库 文件 加密cookie
from django.contrib.sessions.backends import db
  1. 中间件(类似过滤器)

    1. Django中处理请求和响应的框架级别的钩子。本质上就是一个类 类定义5个方法 特定时执行这些方法
    2. 5个方法 4个特征

    1. 执行时间 执行顺序 参数 返回值

      process_request(self,request)

      1. 执行时间 :视图函数之前
      2. 参数:
        1. request:请求的对象和 视图函数是一个对象
      3. 执行顺序 : 按照注册的顺序 顺序执行
      4. 返回值:
        1. None 正常流程
        2. HttpResponse 不执行后续的中间件的process_request 、路由匹配、process_view、视图都不执行,直接执行当前中间件的process_response方法

      process_response(self,request,response)

      1. 执行时间 :视图函数之后
      2. 参数:
        1. request:请求的对象和 视图函数是一个对象
        2. response:响应对象
      3. 执行顺序 : 按照注册的顺序 倒序执行
      4. 返回值:
        1. HttpResponse 必须返回response对象

      process_view(self,request,view_func,view_args,view_kwargs)

      1. 执行时间 :路由匹配之后,视图函数之后

      2. 参数:

        1. request:请求的对象和 视图函数是一个对象
        2. view_func:视图函数 形参
        3. view_args:视图函数的位置参数 形参
        4. view_kwargs:视图函数关键字参数 形参
      3. 执行顺序 : 按照注册的顺序 顺序执行

      4. 返回值:

        1. HttpResponse 之后的中间件的process_view 视图都不执行 执行最后一个中间件的process_response方法

        2. 正常执行顺序

        3. 返回response对象执行顺序

      process_exception(self,request,exception)

      1. 执行时间(触发条件) :视图中有错误
      2. 参数:
        1. request:请求的对象和 视图函数是一个对象
        2. exception:异常对象
      3. 执行顺序 : 按照注册的顺序 倒序执行
      4. 返回值:
        1. None : 当前的中间件没有处理异常 交给下一个中间件处理异常 如果都没有处理异常 就让django处理异常
        2. HttpResponse对象 当前中间件处理了异常后面的process_exception就不执行了 执行最后一个中间件的process_response方法

      process_template_response(self,request,response)

      1. 执行时间(触发条件) :视图中返回对象时一个TemplateResponse对象
      2. 参数:
        1. request :请求的对象和 视图函数是一个对象
        2. response :TemplateResponse对象
      3. 执行顺序 : 按照注册的顺序 倒序执行
      4. 返回值:
        1. HttpResponse对象 必须返回TemplateResponse对象
        2. 过程处理模板的名字参数
          1. response.template_name = 'index1_html'
          2. response.context_data['user'] = 'lsl'

    JSON

    1. 轻量级的文本数据交互格式
    2. python
    3. 支持的数据类型
      1. 字符串 数字 布尔值 列表 字典 None
    4. 序列化
      1. python的数据类型————》》json字符串
    5. 反序列化
      1. json————》》python的数据类型

    AJAX

    1. ajax是一个js技术,实习异步交互

    2. 局部刷新

    3. 传输的数据量很小

    4. <script>
      $('#b1').click(function () {
      $.ajax({
      url:'/calc/',
      type:'get',
      data:{
      'x1':$('[name="i1"]').val(),
      'x2':$('[name="i2"]').val(),
      },
      success:function (data) {
      $('[name="i3"]').val(data)
      }
      })
      })
      </script>
    5. ajax上传文件

      1. $.ajax({
        url:'/test/',
        type:'get',
        data:{
        name:'李世林',
        age:18,
        hobby:JSON.stringify(['q','w','e','r'])
        },
        success:function (data) {
        console.log(data);
        console.log(data.stasus); }
        })
    6. 使用ajax上传文件

      1. $.ajax({
        url:'/upload/',
        type:'post',
        data:formData,
        processData: false,// ajax 不处理数据的编码
        contentType: false,// 不修改content-type的请求头
        success:function (data) {
        alert(data) } })
        from django.views.decorators.csrf import csrf_exempt,csrf_protect,ensure_csrf_cookie
        
        @csrf_exempt   加在视图函数上  该视图不需要进行csrf校验
        @csrf_protect 加在视图函数上 该视图需要进行csrf校验
        @ensure_csrf_cookie 加在视图上 确保返回时设置csrftoken的cookie

        csrf的校验

        从cookie中获取csrftoken的值
        从request.POST中获取csrfmiddlewaretoken的值
        把这两个值做对比 对比成功就接受请求 反之拒绝

        前提:必须有csrftoken的cookie:

        1. 使用{% csrf_token %}
        2. 视图上加ensure_csrf_cookie装饰器

        让ajax可以通过django的csrf的校验:

        1. 给data添加csrfmiddlewaretoken的键值对
        2. 给headers添加x-csrftoken的键值对(导入文件方式)

        推荐:导入文件+确保有cookie

django_day06的更多相关文章

随机推荐

  1. 表达式的动态解析和计算,Flee用起来真香

    前言 在很多项目中经常会出现需要动态解析表达式和计算的场景,比如一些自动审核规则,或者是一些变量的值通过维护的公式在运行过程中动态算出:由于场景需求,都需要比较灵活的配置对应的表达式,然后希望在需要的 ...

  2. JS:逗号运算符

    逗号运算符: 会把逗号隔开的表达式全部执行 最后一个运行的表达式的结果就是逗号运算符的结果   例: var a = (1, 2, 3, 4, 5, 6); console.log(a); //6 隐 ...

  3. Mybatis架构原理(二)-二级缓存源码剖析

    Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...

  4. String-StringBuffer-StringBuilder,Comparable-comparator

    String 1.String是final类,不可被继承 2.内部是value[]的数组 private final char value[]; 3.不可变字符串 String s1 = " ...

  5. 监听 Markdown 文件并热更新 Next.js 页面

    Next.js 提供了 Fast-Refresh 能力,它可以为您对 React 组件所做的编辑提供即时反馈. 但是,当你通过 Markdown 文件提供网站内容时,由于 Markdown 不是 Re ...

  6. 我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:一个Bug 没想到一个Bug,竟然搞我两次! 我大抵是卷上瘾了,横竖都睡不着,坐起来 ...

  7. 【前端面试】(二)JavaScript加法运算

    视频链接:JavaScript加法运算 - Web前端工程师面试题讲解 数值 + 数值 首先看菜鸟教程有关于数值对象的教程 JavaScript Number 对象 可以知道Infinity , -I ...

  8. Git代码提交报错 (Your branch is up to date with 'origin/master)

    一.前言 今天码云上提交自己本地的一个SpringBoot+Vue的小项目,由于前端代码提交第一次时候提交码云上文件夹下为空,于是自己将本地代码复制到码云拉取下来代码文件夹下,然而git add . ...

  9. IDEA快速创建maven项目

    遇到问题不要急,不要怕. 一.  二. 三.  四.Finish进来之后,项目会加载一会,之后会是下面这样子.  五.继续往下面配置,建立java和resorces文件夹  六.下面配置tomcat服 ...

  10. AspectJ和AOP细节

    AspectJ1. 简介 AspectJ:Java社区里最完整最流行的AOP框架.(在Spring中AOP是一种思想,而AspectJ是一种AOP的更明确具体实现) 在Spring2.0以上版本中,可 ...