1. 程式人生 > 實用技巧 >python3 之 天天生鮮 生成訂單

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)