django 12 django中间件,cookie与session

django中间件

复制代码
# 1.所有的请求和响应都必须经过中间件
# 2.django中间件默认自带七个,每个中间件负责不同的功能

    """Django中间件的作用"""
    -1.修改请求,即传送到view中的HttpRequest对象。
    -2.修改响应,即view返回的HttpResponse对象。

# 3.中间件的配置:
    MIDDLEWARE = [
      'django.middleware.security.SecurityMiddleware',
      'django.contrib.sessions.middleware.SessionMiddleware',
      'django.middleware.common.CommonMiddleware',
      'django.middleware.csrf.CsrfViewMiddleware',
      'django.contrib.auth.middleware.AuthenticationMiddleware',
      'django.contrib.messages.middleware.MessageMiddleware',
      'django.middleware.clickjacking.XFrameOptionsMiddleware',

# 4.常见的中间件方法(五个)
   # 1).process_request
     - 1.请求来的时候会按照配置文件中注册了的中间件 从上往下依次执行每一个中间件里面的process_request方法 如果没有则直接跳过
     - 2.该方法如果返回了HttpResonse对象 那么请求不会再往后执行 原路返回
   # 2).process_response
     - 1.响应走的时候会按照配置文件中注册了的中间件 从下往上一次执行每一个中间件里面的process_response方法 没有没有则直接跳过
     - 2.该方法有两个形参request和response 并且默认情况下应该返回response
     - 3.该方法也可以自己返回HttpResponse对象 相当于狸猫换太子
     """ 
     注意:如果请求的过程中process_request方法直接反悔了
             HttpResponse对象那么会原地执行同级别process_response方法返回(flask则不同)
     """
   # 3).process_view
     当路由匹配成功之后 执行视图函数之前 自动触发

   # 4).process_excption
     当视图函数报错之后 自动触发

   # 5).process_template_response
     当视图函数返回的数据对象中含有render属性对应render函数才会触发

# 5.自定义中间件
    - 1. 创建一个任意名的文件夹
    - 2. 文件夹内创建一个任意名的py文件
    - 3. 在py文件内编写中间件类(参考自带中间件的代码编写类并继承)
- 4. 在配置文件中注册即可(注册后才可以生效)
复制代码

 cookie与session简介

复制代码
# 1.cookie
     保存在客户端与用户状态相关的信息
# 2.session
     保存在服务端与用户状态相关的信息
"""session的工作需要依赖于cookie"""
# 3.浏览器有资格拒绝保存服务端发送过来的cookie数据

# 4.django操作cookie
  - 1.想让客户端浏览器保存cookie需要HttpResponse对象调用方法
    from django.shortcuts import render,HttpResponse,redirect,JsonResponse
    return render()
    return HttpResponse()
    return redirect()
    return JsonRepsonse()

  - 2.设置cookie
    obj = HttpResponse()/render()/redirect()/JsonResponse()
    obj.操作cookie的方法
    return obj

  - 3.cookie操作设置
    1.登录设置cookie
    2.多个视图函数都需要校验用户是否登录(装饰器)
    3.记录住用户登录之前想要访问的页面,登录成功后自动跳转
          场景1:用户访问了其他需要登录才可以访问的页面   如何跳转>>>:想要访问的
          场景2:用户直接访问的登录页面  如何跳转>>>:网址首页
            print(request.path)
            print(request.path_info)
            print(request.get_full_path())

# 5.django操作session
  -1.session类似于服务端接收到客户端产生的随机字符串,存储后每次自动校验

  -2.session的特点:
        1.django默认的session失效时间是14天
        2.客户端会接收到键值对,键默认是sessionid的值是加密的随机字符串(令牌)
        3.session用于存储一次会话的多次请求的数据,存在服务端
        4.session可以存储任意类型,任意大小的数据
        5.即使浏览器关闭,保存的session也不会改变
        6.session是以键值对的形式存储的
        7.session依赖于cookie;唯一标识码保存在sessionid cookie

  -3.session操作
      request.session['name'] = 'jason'
        1.django自动产生一个随机字符串返回给客户端(对name加密)
        2.往django_session创建数据(对jason加密)
      request.session.get('name')
        1.自动从请求中回去session对应的随机字符串
        2.拿着随机字符串去django_session中匹配数据
        3.匹配到会自动解密并且展示
  
  -4.session的存储位置(五种模式)
       1.数据库
       2.缓存数据库
       3.文件
       4.缓存+数据库
       5.加密
  
  -5.session其他操作
       1.删除
           # 删除当前会话的所有Session数据
           request.session.delete()
           # 删除当前的会话数据并删除会话的Cookie。
           request.session.flush() 
       2.时间设置
           # 设置会话Session和Cookie的超时时间
           request.session.set_expiry(value)

"""
      1.如果value是一个int类型,那么session将在value这个时间后过期,其中value代表的是秒。
      2.如果value是一个datetime或者timedelta对象,那么这个session将在指定的时间后过期。datetime必须是使用了PickleSerializer进行序列化的。
      3.如果value等于0,那么session将在web浏览器关闭后就直接过期。
      4.如果value等于None,那么session将用settings.py中设置的全局过期字段SESSION_COOKIE_AGE,这个字段默认是14天,也就是2个礼拜。
      5.读session的时候不会修改session的有效期,修改session的时候会重新设置session的有效期,会从修改的时间,重新计时。
      6.如果settings.py中设置了SESSION_EXPIRE_AT_BROWSER_CLOSE=True,那么默认讲不再使用SESSION_COOKIE_AGE了,而是浏览器一关闭,session数据就会过期。这个值默认是为False。 
"""   
复制代码

 

posted @   橘子菌菌n  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示