You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中创建和获取session对象以实现用户专属购物车?

Django session 操作指南(适配自定义用户表场景)

Django 内置的 session 框架已经封装了所有 session 的创建、存储、读取逻辑,你不需要手动实例化 Session 对象,所有操作都可以通过视图的 request.session 属性完成,自定义用户表不会影响基础 session 逻辑。


前置配置检查

首先确认项目基础配置正确(默认创建的Django项目都已开启,仅做核对):

  • settings.py 的 MIDDLEWARE 列表中包含 django.contrib.sessions.middleware.SessionMiddleware
  • settings.py 的 INSTALLED_APPS 列表中包含 django.contrib.sessions
  • 已经执行过 python manage.py migrate 生成 session 存储表(默认用数据库存储session)

核心操作方法

获取session值

直接按照字典的方式读取,建议设置默认值避免抛出KeyError,以获取购物车数据为例:

# 获取当前用户的购物车数据,不存在则返回空字典
user_cart = request.session.get("cart", {})

新增/更新session值

直接对request.session做字典赋值即可,如果修改的是session中的可变对象(字典、列表等),需要手动标记session已修改才会生效:

# 初始化购物车
if "cart" not in request.session:
    request.session["cart"] = {}

# 给sku_id为1001的商品增加1件
request.session["cart"]["1001"] = request.session["cart"].get("1001", 0) + 1
# 修改可变对象后必须标记已修改,否则修改不会被同步到存储
request.session.modified = True

删除session内容

# 删除购物车中指定商品
del request.session["cart"]["1001"]
request.session.modified = True

# 清空整个购物车
if "cart" in request.session:
    del request.session["cart"]

# 清空当前用户所有session数据(一般用于退出登录场景)
request.session.flush()

自定义用户表适配注意事项

只要你的登录逻辑是调用Django官方的auth.login(request, user)方法实现的,session会自动和当前登录用户绑定,不需要额外做关联操作。
如果需要调整购物车的保留时长,可以在settings.py中配置session过期规则:

# 设置session7天过期,单位为秒
SESSION_COOKIE_AGE = 7 * 24 * 60 * 60
# 浏览器关闭时是否自动清除session,默认False
SESSION_EXPIRE_AT_BROWSER_CLOSE = False

内容的提问来源于stack exchange,提问作者Christo Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:15:08