• cookie和session


    一:cookie和session

    1.什么是cookie?

    保存在客户端上与用户信息(状态)相关的数据

    2.什么是session?

    保存在服务端上与用户信息(状态)相关的数据

    3.两者之间的关系?

    session的工作需要基于cookie,目前所有需要识别用户信息的网站都使用了cookie,客户端浏览器也可以通过设置,拒绝保存cookie

    二:django操作cookie

    1.如何设置cookie
    def set_cookie(request):
        obj = HttpResponse('设置cookie')
        obj.set_cookie('name', 'jason', max_age=1000)
        return obj
    
    • 1
    • 2
    • 3
    • 4
    2.通过coolie实现校验用户是否登录的装饰器

    views.py

    from django.shortcuts import render, HttpResponse, redirect
    
    
    # Create your views here.
    
    def login_auth(func_name):
        def inner(request, *args, **kwargs):
            if request.COOKIES.get('name'):
                res = func_name(request, *args, **kwargs)
                return res
            else:
                target_path = request.path_info
                return redirect(f'/login/?next={target_path}')
        return inner
    
    
    def login(request):
        if request.method == "POST":
            name = request.POST.get('name')
            pwd = request.POST.get('pwd')
    
            if name == 'xie' and pwd == '123':
                target_path = request.GET.get('next')
                if target_path:
                    obj = redirect(target_path)
                else:
                    obj = redirect('/home/')
                obj.set_cookie('name', 'xie')
                return obj
    
        return render(request, 'login.html')
    
    @login_auth
    def home(request):
        return HttpResponse('home页面')
    
    
    @login_auth
    def index(request):
        return HttpResponse('index页面')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    urls.py

    urlpatterns = [
        path('login/', views.login),
        path('home/', views.home),
        path('index/', views.index),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三:django操作session

    1.底层的工作原理
    • 请求来了之后服务端产生随机字符串并发给客户端保存,服务端存储随机字符串与用户信息的对应关系,之后客户端携带随机字符串,服务端自动校验
    2.补充知识点
    • 1.django默认的session失效时间14天
    • 2.客户端会接收到键值对 键默认是sessionid值是加密的随机字符串(令牌)
    3.设置session
    • request.session[‘name’] = ‘jason’
    • 1.django自动产生一个随机字符串返回给客户端(对name加密)
    • 2.往django_session创建数据(对jason加密)
    4.获取session
    • request.session.get(‘name’)
    • 1.自动从请求中获取sessionid对应的随机字符串
    • 2.拿着随机字符串去django_session中匹配数据
    • 3.如果匹配上还会自动解密数据并展示
    5.session的存储位置可以有五种模式
    • 数据库
    • 缓存数据库
    • 文件
    • 缓存+数据库
    • 加密
    6.session补充知识点
    • 1.删除当前会话的所有Session数据: request.session.delete()
    • 2.删除当前的会话数据并删除会话的Cookie: request.session.flush()
    • 3.设置会话Session和Cookie的超时时间: request.session.set_expiry(value)
      • 如果value是个整数,session会在些秒数后失效。
      • value是个datatime或timedelta,session就会在这个时间后失效。
      • 如果value是0,用户关闭浏览器session就会失效。
      • value是None,session会依赖全局session失效策略。

    四:django中简件

    1.要点知识

    1.django中间件相当于是django的门户,所有请求来和相应走都要经过中间件

    2.django默认自带7个中间件,每个中间件都有自己特有的功能

    3.django中间件除了默认的之外,还支持自定义中间件

    2.中间件的使用场景

    全局相关的功能:全局身份校验,全局用户黑名单校验,全局用户访问频率校验

    3.django自定义中间件中的5个方法

    1.process_request:

    • 请求来的时候,会按照配置文件中注册了的中间件,依次从上往下执行每一个中间件中的process_request方法,如果没有则直接跳过

    2.request_response

    • 相应走的时候,会按照配置文件中注册了的中间件,从下往上执行每一个中间件中的process_response方法,如果没有则直接跳过
    • 有两个默认形参:request,response,并且默认情况下返回:response
    • 该方法还可以自己返回HttpResponse对象
    4.django中间件中需要了解的方法

    1.process_view
    当路由匹配成功之后 执行视图函数之前 自动触发
    2.process_excption
    当视图函数报错之后 自动触发
    3.process_template_response
    当视图函数返回的数据对象中含有render属性对应render函数才会触发

  • 相关阅读:
    121. 买卖股票的最佳时机 --力扣 --JAVA
    速溶颗粒:实验中的好伙伴
    spring框架中的IOC实现
    图像识别技术如何改变智能家居的体验?
    table多行表头渲染时出现位置错乱问题
    mac安装git
    SpringCloud Alibaba——精读Nacos+CMDB+核心源码阅读(7w字长篇)
    Opencv系列之一:简介与基本使用
    精品基于Uniapp+SSM实现的实验室设备预约管理APP
    eslint+prettier 配置
  • 原文地址:https://blog.csdn.net/Yydsaoligei/article/details/126821548