Django-状态保持(session)

2022-09-15  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读