美多商城之订单模块

1. 结算订单

    1.1 核心思想:

        查询和展示订单中要结算的信息(收货地址、支付方式、购物车中被勾选的商品信息)

    1.2 实现方式:

 以查询购物车中被勾选的商品信息为例    redis_cart = redis_conn.hgetall('carts_%s' % user.id)    redis_selected = redis_conn.smembers('selected_%s' % user.id)    new_cart_dict = {}    for sku_id in redis_selected:           new_cart_dict[int(sku_id)] = int(redis_cart[sku_id])

2. 提交订单

    2.1 订单数据表

        订单基本信息表、订单商品信息表        订单基本信息表和订单商品信息表是一对多的关联关系

    2.2 保存订单信息

    # 接收参数    # 校验参数    # 保存订单基本信息 OrderInfo(一)    # 从redis读取购物车中被勾选的商品信息    # 遍历购物车中被勾选的商品信息        # 查询SKU信息      # 判断SKU库存      # SKU减少库存,增加销量      # 修改SPU销量      # 保存订单商品信息 OrderGoods(多)      # 保存商品订单中总价和总数量    # 添加邮费和保存订单信息    # 清除购物车中已结算的商品    # 响应提交订单结果

    2.3 使用事务保存订单数据

        2.3.1 为什么要使用事务保存订单数据?            对于订单相关数据表的操作要么一起成功,要么一起失败        2.3.2 实现方式:            with transaction.atomic():          # 显式的开启一次事务,以下这部分代码会在事务中执行          # 创建保存点          # 错误回滚事务          # 正确提交一次事务

    2.4 使用乐观锁并发下单

        2.4.1 为什么要使用乐观锁下单?            为了保证在出现高并发时,库存和销量不会出错,保证数据安全        2.4.2 实现方式:            result = SKU.objects.filter(id=sku_id, stock=origin_stock).update(stock=new_stock, sales=new_sales)      # 如果下单失败,但是库存足够时,继续下单,直到下单成功或者库存不足为止      if result == 0:          continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值