python3 之 天天生鲜 生成订单

根据情况设定,例如这鸟样的生成订单,或是直接跳转付款页面:

detail页面

 

 

  <form action="{% url 'orders:place' %}" method="post">
        {% csrf_token %}
            ...........
                <input type="submit" class="buy_btn" id="buy_btn" value="立即购买">
                <a href="javascript:;" class="add_cart" id="add_cart" sku_id="{{ sku.id }}">加入购物车</a>
    
        </form>

cart页面

<form action="{% url 'orders:place' %}" method="post">
        {% csrf_token %}
        ...........
        <li class="col04"><input  type="submit" id="commit_btn" value="生成订单"></li>
    </form>

获取订单商品

  实现:是否登录 -----  验证商品来源  detail  or   cart ! -------  邮寄地址

class PlaceOrdereView(LoginRequired):
    def post(self,request):
        #获取商品id 和 count
        sku_ids = request.POST.getlist('sku_ids')   #get得到一个,获取多选时用 getlist
        count = request.POST.get('count')
        #判断商品存在
        if sku_ids is None:
            #没有给他重定向
            return redirect('/cart/info/')
        # 定义临时容器存商品  商品总数量、总价、运费、实付款
        skus = []
        total_count = 0
        total_sku_amount = 0
        trans_cost = 6
        total_amount = 0
        #判断 订单页面来源
        if not count:
            #没有count 来自cart 因为模板html里没有指定或名字不一致
            # 创建 redis 客户端 读取cart
            user_id = request.user.id
            redis_conn = get_redis_connection('default')
            cart_dict = redis_conn.hgetall('cart_%s'%user_id)
            #遍历商品 id
            for sku_id in sku_ids:
                #验证商品
                try:
                    sku = GoodsSKU.objects.get(id=sku_id)
                except GoodsSKU.DoesNotExist:
                    return JsonResponse({'message': '商品不存在'})
                #把商品加入到容器 订单页面遍历上商品
                skus.append(sku)
                #获得商品数量 进行转换       encode:编码 decode:解码
                sku_count = int(cart_dict[sku_id.encode()])  #不编码报错 keyerror
                sku.count = sku_count  #动态添加属性
                sku_amount = sku.price*sku_count  #单个商品总价格
                sku.amount = sku_amount  #动态添加属性
                total_count += sku_count #总数量
                total_sku_amount += sku_amount #商品总价格
            #总付款 代运费
            total_amount = total_sku_amount + trans_cost

        else:
            #遍历shangpin
            for sku_id in sku_ids:
                # 验证商品
                try:
                    sku = GoodsSKU.objects.get(id=sku_id)
                except GoodsSKU.DoesNotExist:
                    return JsonResponse({'message': '商品不存在'})
                # 把商品加入到容器 订单页面遍历上商品
                skus.append(sku)
                try:
                    # 取商品数量
                    sku_count = int(count)
                except Exception:
                    # return redirect(reverse("goods:detail",args=(sku.id)))
                    return redirect('/detail/%s' % sku.id)
                #验证库存
                if sku.stock < sku_count:
                    return redirect('/detail/%s' % sku.id)
                sku.count = sku_count  # 动态添加属性
                sku_amount = sku.price * sku_count  # 单个商品总价格
                sku.amount = sku_amount  # 动态添加属性
                total_count += sku_count  # 总数量
                total_sku_amount += sku_amount  # 商品总价格
            # 总付款 代运费
            total_amount = total_sku_amount + trans_cost
        #地址信息
        try:
            address = Address.objects.filter(user=request.user).last()
        except Exception as e:
            print(e.with_traceback,'-----------------------------------')
            return redirect('/user/address')

        context ={
            "skus": skus,
            "total_amount": total_amount,
            'address': address,
            'total_sku_amount': total_sku_amount,
            'trans_cost': trans_cost,
            'total_count': total_count,
            'sku_ids':sku_ids
        }
        return render(request,'place_order.html',context)

 

posted @ 2020-10-29 17:52  Py_beginner  阅读(148)  评论(0编辑  收藏  举报