Flask开发电商时Session购物车相同商品重复新增如何改为数量叠加
代码修改方案
当前代码未校验购物车中是否已存在同款商品,每次提交均直接追加新条目,修改时先遍历购物车匹配商品ID,匹配成功则累加数量,匹配失败再新增条目,同时补充购物车未初始化时的创建逻辑即可。
@app.route('/item/<id>', methods=['POST', 'GET']) def item_page(id): form = add_to_cart() if form.validate_on_submit(): # 统一转换数据类型,避免字符串/数字类型不匹配导致匹配失败 target_product_id = str(form.id.data) add_quantity = int(form.quantity.data) # 购物车未初始化时先创建空列表 if 'cart' not in session: session['cart'] = [] product_existed = False # 遍历现有购物车匹配商品ID for item in session['cart']: if str(item['id']) == target_product_id: item['quantity'] += add_quantity product_existed = True break # 无同款商品时新增条目 if not product_existed: session['cart'].append({'id': target_product_id, 'quantity': add_quantity}) # 标记session已修改,确保修改生效 session.modified = True return render_template('product.html', form=form)
核心修改点说明
- 补充了购物车初始化逻辑,解决首次添加商品时session无cart字段导致的添加失败问题
- 新增商品ID匹配逻辑,匹配到已存在的商品时直接累加对应数量,不会生成重复条目
- 统一转换商品ID为字符串类型,避免表单提交的字符串ID和session中存储的数字ID匹配失败的问题
- 统一设置session.modified标记,Flask默认不会检测session内部可变对象的修改,手动设置可确保修改被正常同步。
内容的提问来源于stack exchange,提问作者whitetshirt
相关产品推荐
相关产品推荐

