如何在Django中创建和获取session对象以实现用户专属购物车?
Django session 操作指南(适配自定义用户表场景)
Django 内置的 session 框架已经封装了所有 session 的创建、存储、读取逻辑,你不需要手动实例化 Session 对象,所有操作都可以通过视图的 request.session 属性完成,自定义用户表不会影响基础 session 逻辑。
前置配置检查
首先确认项目基础配置正确(默认创建的Django项目都已开启,仅做核对):
settings.py的MIDDLEWARE列表中包含django.contrib.sessions.middleware.SessionMiddlewaresettings.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
相关产品推荐
相关产品推荐

