美文网首页
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)

    一、session工作流程 session保存与服务器端,session需要依赖于cookie第一次请求http:...

  • session笔记

    session session和cookie区别 cookie采用客户端保持状态 Session采用服务端保持状态...

  • django-利用session机制唯一登录

    django-利用session机制唯一登录 配置连接数据库 生成session表 登录时记住保存用户登录信息

  • Session共享

    用户从前端请求过来时会在session中携带了信息,用于保存http状态Session共享及Session保持或者...

  • day5 cookie和session 2018-08-10

    1. cookie 和 session HTTP 协议是一个""无法保持状态""的协议,如果需要"保持状态''记录...

  • 状态保持cookie和session

    简单的介绍 http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,...

  • Django视图-状态保持Session

    Session流程图 应用 对于敏感、重要的信息,建议要储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验...

  • django 状态保持 Cookie Session

    状态保持 浏览器请求服务器是无状态的。无状态指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求...

  • 2019-04-28 JavaWeb之Session

    Session机制 session机制采用的是在服务器端保持 HTTP 状态信息的方案 。 除了使用Cookie,...

  • PHP中session和cookie的原理及优缺点

    Session Session的机制 session机制采用的是在服务器端保持状态的方案,并且有自己对应的唯一标识...

网友评论

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

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