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)