django中session值的数据类型是dict,需要手动save(),更新才会传递到其他页面。

django 项目在一个页面中删除了session中的某一个成员(del request.session"test""a"),切换到另外一个页面的时候,session中的那个成员居然还在。让我一阵莫名其妙。

python 复制代码
# 对session["test"]进行初始化赋值
def page0(request):
    request.session["test"]={"a":1, "b":2, "c":3, "d":4}
    return HttpResponse("session['test']=" + str(request.session["test"]))


# 显示session["test"]的当前值
def page1(request):
    x = str(request.session["test"]) + ' <--before ' + str(random.random())
    return HttpResponse(x)


# 删除session["test"]的其中两个成员
def page2(request):
    del request.session["test"]["b"]
    del request.session["test"]["c"]
    x = str(request.session["test"]) + ' <--after ' + str(random.random())
    return HttpResponse(x)



# 依次执行 page0 --> page1 --> page2 --> page1
# 期望最后一次执行page1的时候,显示跟page2一样,但发现最后一次page1 显示的内容跟第一次page1一样。

后来在page2中加了一句request.session.save() 后显示才符合预期。

python 复制代码
request.session.save()

我印象中不需要主动.save()的啊,猜想可能是因为request.session"test"的数据类型是字典,里面成员的更新,在session中间件中没有检测到。 request.session的直接成员重新赋值,才会被检测到。验证发现果然是这样。

python 复制代码
# 把page2的代码改为对request.session["test"]重新赋值,结果符合预期了。

def page2(request):

    test = request.session["test"]
    del test["b"]
    del test["c"]
    request.session["test"] = test
    x = str(request.session["test"]) + ' <--after ' + str(random.random())
    return HttpResponse(x)



# 依次执行 page0 --> page1 --> page2 --> page1
# 最后一次执行page1的结果,跟page2一样了。

对于这个问题,gpt3.5无法发现问题所在,gemini给出save()方案解决,gpt4给出取出来更新再重新赋值给session的解决方案。

相关推荐
ZYJCSZKJ32 分钟前
基于地理位置围栏的短视频POI团购系统:LBS空间索引与流量分发实践
java·服务器·数据库
Mr.朱鹏8 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠8 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng18 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3229 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向10 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却11 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO12 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记13 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数13 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全