美文网首页
Django-状态保持(session)

Django-状态保持(session)

作者: 测试探索 | 来源:发表于2022-09-15 22:06 被阅读0次

    一、session工作流程

    session保存与服务器端,session需要依赖于cookie
    第一次请求http://127.0.0.1:8000/set_cookie/?username=itcast&password=123,在服务器设置session信息
    服务器同时会生成一个sessionid的cookie信息。
    浏览器接收到这个信息之后,会把cookie数据保存起来
    第二次及其之后的请求,都会携带这个sessionid,服务器会验证这个sessionid,验证没有问题会读取相关数据,实现业务逻辑

    二、session数据保存

    session数据保存在数据库中,读取比较慢,可以把session数据保存到redis中,提升读取效率

    2-1:安装扩展
    pip3 install django-redis
    
    2-2:在settings.py文件新增如下配置
    CACHES = {
        'default':{
            'BACKEND':'django_redis.cache.RedisCache',
            'LOCATION':'redis://127.0.0.1:6379/1',
            'OPTIONS':{
                'CLIENT_CLASS':'django_redis.client.DefaultClient',
            }
        }
    }
    
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    SESSION_CACHE_ALIAS = 'default'
    

    三、代码逻辑

    3-1:子应用下book/views.py文件,设置和获取session
    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    from book.models import BookInfo
    import json,re
    
    # Create your views here.
    
    #####################################
    """
    session保存与服务器端,session需要依赖于cookie
    第一次请求http://127.0.0.1:8000/set_cookie/?username=itcast&password=123,在服务器设置session信息
    服务器同时会生成一个sessionid的cookie信息。
    浏览器接收到这个信息之后,会把cookie数据保存起来
    第二次及其之后的请求,都会携带这个sessionid,服务器会验证这个sessionid,验证没有问题会读取相关数据,实现业务逻辑
    """
    
    def set_session(request):
        #1.模拟 获取用户信息
        username = request.GET.get('username')
        #2.设置session信息
        #假如 通过模型查询,查询到了 用户的信息
        user_id = 1
        request.session['user_id'] = user_id
        request.session['username'] = username
        return HttpResponse("set_session")
    
    def get_session(request):
    
        user_id = request.session.get('user_id')
        username = request.session.get('username')
        content = '{},{}'.format(user_id,username)
        return HttpResponse(content)
    
    set_session方法的结果

    因为放在redis中,提升读取效率,因此查看redis结果


    与前端展示一致
    get_session结果
    3-2:子应用下,删除session

    book/views.py,使用clear()或flush()方法

    from django.shortcuts import render
    from django.http import HttpResponse,JsonResponse
    from book.models import BookInfo
    import json,re
    
    # Create your views here.
    
    、、
    #####################################
    """
    session保存与服务器端,session需要依赖于cookie
    第一次请求http://127.0.0.1:8000/set_cookie/?username=itcast&password=123,在服务器设置session信息
    服务器同时会生成一个sessionid的cookie信息。
    浏览器接收到这个信息之后,会把cookie数据保存起来
    第二次及其之后的请求,都会携带这个sessionid,服务器会验证这个sessionid,验证没有问题会读取相关数据,实现业务逻辑
    """
    
    def set_session(request):
        #1.模拟 获取用户信息
        username = request.GET.get('username')
        #2.设置session信息
        #假如 通过模型查询,查询到了 用户的信息
        user_id = 1
        request.session['user_id'] = user_id
        request.session['username'] = username
    
        # clear 删除session里的数据,但是key有保留
        # request.session.clear()
        # flush 删除所有的数据,包括key
        request.session.flush()
        # 设置session过期时间
        # request.session.set_expiry(3600)
        return HttpResponse("set_session")
    
    def get_session(request):
    
        user_id = request.session.get('user_id')
        username = request.session.get('username')
        content = '{},{}'.format(user_id,username)
        return HttpResponse(content)
    
    使用flush()更彻底
    image.png

    相关文章

      网友评论

          本文标题:Django-状态保持(session)

          本文链接:https://www.haomeiwen.com/subject/ruxkortx.html