python3 之 天天生鮮 生成訂單
阿新 • • 發佈:2020-10-29
根據情況設定,例如這鳥樣的生成訂單,或是直接跳轉付款頁面:
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') #判斷商品存在 ifsku_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)