• 开发工程师必备————【Day33】Django补充(八)


    今日内容概要

    • cookie与session
    • django操作cookie
    • django操作session
    • django中间件

    cookie与session简介

    1.复习HTTP协议
    “”"
    HTTP协议四大特性
    1.基于请求响应
    2.基于TCP、IP作用于应用层之上协议
    3.无状态
    服务端无法识别客户端的状态
    1.互联网刚开始兴起的的时候 所有人访问网址都是一样的数据
    服务端无法识别客户端问题不大
    2.互联网发展 淘宝、京东、阿里
    服务端不得不想办法记住客户端的状态
    cookie与session应运而生
    4.无连接
    “”"

    2.Cookie
    保存在客户端上跟用户信息(状态)相关的数据
    3.Session
    保存在服务端上跟用户信息(状态)相关的数据

    4.两者之间的关系
    ps:session的工作需要依赖于cookie 就算是目前所有能够识别用户身份的网址也都需要使用cookie(客户端浏览器也有权拒绝保存cookie)

    django操作cookie

    如果想要让客户端浏览器保存cookie需要HttpResonse对象调用方法
    1.以前返回版本

    return HttpResponse()
    return render()
    return redirect()
    return JsonRepsonse()
    
    • 1
    • 2
    • 3
    • 4

    2.现在需要写一个变量存取,然后返回一个变量!!!

    设置cookie需要变形
    obj = HttpResponse()
    obj.操作cookie的方法
    return obj
    
    obj = render()
    obj.操作cookie的方法
    return obj
    
    obj = redirect()
    obj.操作cookie的方法
    return obj
    
    obj = JsonRepsonse()
    obj.操作cookie的方法
    return obj
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

    请添加图片描述

    django操作session

    请求来之后服务端产生随机字符串并发送给客户端保存 服务端存储随机字符串与用户信息的对应关系 之后客户端携带随机字符串 服务自动校验

    1.django默认的session失效时间14天
    2.客户端会接收到键值对 键默认是sessionid值是加密的随机字符串(令牌)

    1.代码说明

    request.session['name'] = 'jason'
    
    1.django自动产生一个随机字符串返回给客户端(对name加密)
    2.往django_session创建数据(对jason加密)
    
    • 1
    • 2
    • 3
    • 4
    request.session.get('name')
    
    	1.自动从请求中获取sessionid对应的随机字符串
     	2.拿着随机字符串去django_session中匹配数据
     	3.如果匹配上还会自动解密数据并展示
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.session的存储位置可以有五种模式
    数据库
    缓存数据库
    文件
    缓存+数据库
    加密

    3.session其他操作
    删除当前会话的所有Session数据

    request.session.delete()
    
    • 1

    删除当前的会话数据并删除会话的Cookie。

    request.session.flush()
    
    • 1

    设置会话Session和Cookie的超时时间

    request.session.set_expiry(value)
           * 如果value是个整数,session会在些秒数后失效。
           * 如果value是个datatime或timedelta,session就会在这个时间后失效。
           * 如果value是0,用户关闭浏览器session就会失效。
           * 如果value是None,session会依赖全局session失效策略。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    django中间件

    1.中间件定义与介绍

    • django中间件类似于django的门户 所有的请求来和响应走都必须经过中间件。
    • django默认自带七个中间件,每个中间件都有各自负责的功能。
    • django中间件除了默认的之外,还支持自定义中间件(无限)。

    2.django中间件使用场景
    全局相关的功能:
    全局用户身份校验 全局用户黑名单校验 全局用户访问频率校验

    3.django自定义中间件中可以有五个方法
    process_request
    process_response
    process_view
    process_template_response
    process_exception

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

    4.自定义中间件
    首先可以通过查看django自带的中间件查看中间件定义的规律
    导入MiddlewareMixin创建类继承MiddlewareMixin。

    from django.utils.deprecation import MiddlewareMixin
    
    class MyMdd1(MiddlewareMixin):
       def process_request(self,request):
           print('MyMdd1 process_request')
           # return HttpResponse('回去吧')
    
       def process_response(self,request,response):
    		print('MyMdd1 process_response')
            return response
       def >process_view(self,request,view_func,view_args,view_kwargs):
           print('MyMd1 process_view')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    再类中,直接创建中间件方法,配上对应的形参即可。

    ```python
    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',
       #自定义的中间件
       'app01.utils.mymdd.MyMdd2',
       'app01.utils.mymdd.MyMdd1',
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    sql:SQL优化知识点记录(九)
    蓝桥杯2023年第十四届省赛真题-买瓜--C语言题解
    使用VUE等主流框架提升小程序开发效率
    开启数字新纪元:全球首款开源AI女友,你的私人数字伴侣
    SPark学习笔记:13 Spark Streaming 的Transform算子和Action算子
    python目标检测将视频按照帧率切除成图片
    深度学习计算 - 延后初始化&自定义层
    SLAM从入门到精通(从amcl到navigation软件栈)
    老卫带你学---leetcode刷题(139. 单词拆分)
    数据结构与算法之动态规划算法(DP)
  • 原文地址:https://blog.csdn.net/DiligentGG/article/details/126820606