session原理

本文深入解析了Django框架中的Session机制,包括Session的工作原理、如何基于Cookie进行数据存储、如何在服务器端加密保存敏感数据,以及如何通过Python代码设置、获取和管理Session。文章还提供了详细的代码示例,展示了如何在Django项目中实现Session的设置、获取、删除和清空操作。

原理

1 Session基于Cookie
2 Session把敏感的数据以加密的方式保存在服务器

设置

request.session[key] = value
设置过期时间:request.session.set_expiry(60*60)
获取:value = request.session.get(key)
若是没有key,返回None

例子

1 首先先配置主项目的urls:
2 然后在配置apps里的urls和views视图
3 创建MySQL项目,生成迁移文件
4 运行项目
代码1:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('user.urls')),
]

代码2:

from django.urls import path,re_path
from . import views

urlpatterns = [
    path('',views.index_handler,name='index'),
    re_path('set_cookie/(.+)/(.+)',views.set_cookie_handler,name='set_cookie'),
    re_path('get_cookie/(.+)',views.get_cookie_handler,name='get_cookie'),
    re_path('set_session/(.+)/(.+)',views.set_session_handler,name='set_session'),
    re_path('get_session/(.+)',views.get_session_handler,name='get_session'),
    path('flush',views.flush_session_handler,name='flush'),
    path('clear',views.clear_session_handler,name='clear'),
]

视图:

from django.shortcuts import render,HttpResponse

# Create your views here.
def index_handler(request):
    return HttpResponse('index')


def set_cookie_handler(request,key,value):
    response = HttpResponse()
    response.set_cookie(key,value,max_age=60*60)
    return response


def get_cookie_handler(request,key):
    value = request.COOKIES.get(key)
    return HttpResponse(value)


def set_session_handler(request,key,value):
    request.session[key] = value
    # request.session.set_expiry(60*60)
    return HttpResponse('设置成功')


def get_session_handler(request,key):
    value = request.session.get(key)
    return HttpResponse(value)

def flush_session_handler(request):
    request.session.flush()
    return HttpResponse('flush')


def clear_session_handler(request):
    request.session.clear()
    return HttpResponse('clear')

代码3:生成迁移文件

create database django3;

启动项目:

  1. 输入:http://127.0.0.1:8000/set_session/username/name2
    显示:设置成功!
  2. 输入:http://127.0.0.1:8000/get_session/username
    显示:name2
  3. 刷新数据库,会出现刚才输入的数据:
    在这里插入图片描述

删除和清空

request.session.flush() 删除表结构
request。session.clear() 清空sessionld对应的数据
代码如上:
输入:http://127.0.0.1:8000/clear
刷新数据库,在data表里数据发生变化
输入:http://127.0.0.1:8000/get_session/username
返回的是None
输入:http://127.0.0.1:8000/flush
刷新数据库,数据库的数据全部消失!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值