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