Django开发购物车报错:WSGIRequest对象无session_key属性如何解决
问题排查及解决方案
你代码里存在3处核心错误,对应修复方案如下:
1. Session Key 读取、创建逻辑错误
你代码中request.session_key是错误用法,Django的Session Key存放于request.session对象下,正确读取属性为request.session.session_key;同时request.session.create()方法无返回值,直接赋值会导致cart_id存储为None,进而引发后续查询异常。
修复_cart_id函数:
def _cart_id(request): cart = request.session.session_key if not cart: # 给session设置任意值触发自动创建,避免直接调用create无返回值 request.session['cart_init_flag'] = True cart = request.session.session_key return cart
2. 模型查询管理器拼写错误
你代码中CartItem.object.get调用了单数的object,Django模型默认的查询管理器是复数形式objects,拼写错误会直接抛出属性不存在的异常。
修复对应代码行:
# 原错误写法:cart_item = CartItem.object.get(product = prod,cart = cart) # 修复后: cart_item = CartItem.objects.get(product = prod,cart = cart)
3. 购物车数量累加逻辑错误
你代码中cart_item.quantity += cart_item.quantity会导致每次添加商品时数量直接翻倍,不符合常规购物车「添加一次数量+1」的逻辑,调整后需要主动调用save()保存修改:
# 原错误逻辑:cart_item.quantity += cart_item.quantity # 修复为: cart_item.quantity += 1 cart_item.save()
额外校验项
如果修复后仍有异常,请检查:
- 确认
django.contrib.sessions.middleware.SessionMiddleware已经添加到settings.py的MIDDLEWARE列表中(仅配置INSTALLED_APPS不生效,必须同时开启Session中间件) - 确认对应视图没有添加
@csrf_exempt等会跳过Session处理的装饰器
内容的提问来源于stack exchange,提问作者sarangkkl
相关产品推荐
相关产品推荐

