iT邦幫忙

2021 iThome 鐵人賽

DAY 17
1
Modern Web

30天肝出購物網站系列 第 17

Day17:17 - 結帳服務(1) - 後端 - 結帳、訂單新增API

  • 分享至 

  • xImage
  •  

Здравейте,我是Charlie!

在Day16當中,我們完成了前端的購物車新增跟刪除,而今天我們將完成結帳跟訂單新增的API。

================================◉‿◉=================================

首先是結帳的部分,由於我們結帳的時候是結帳整個購物車,所以直接收到username就可以了。

先在userorder裡面新增urls.py,並且新增url patterns:

# userorder\urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
	url(r'^$',views.userorder)
]

# keyboardmarket\urls.py
url('userorder',include('userorder.urls'))

並且在userorder當中建立userorder view:

from tools.R import R
from tools.login_check import logincheck

@logincheck('POST')
def userorder(request):
	if request.method == "POST":
		pass
	else:
		return R.methodNotAllowed('method not allowed')

結帳的話用的是POST請求,會收到的是username的部分,所以這邊在接收到username時直接抓取user相關的cart,並進行結帳的動作:

req = request.body
udata = json.loads(req)
if "username" not in udata:
	return R.badRequest("username not found")
username = udata["username"]
user = User.objects.filter(name = username)
if not user:
	return R.badRequest("user does not exist")
user = user[0]
usercart = Cart.objects.filter(user = user)
if not usercart:
	return R.badRequest("cart is empty")

如果usercart的資料都沒問題的話,下一步是產生我們的訂單編號,這裡的訂單編號採用日期 + UUID4前一位的部分,所以先產生訂單編號,再對Cart跟order的model進行操作:

from .models import Order
import json
import uuid
from tools.db import CartStatus,OrderStatus

now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
uuid4String = str(uuid.uuid4()).split("-")[0]
orderno = now + uuid4String
for cart in usercart:
	cart.status = CartStatus.deactivate.value
	cart.save()
	userorder = Order.objects.create(
		orderno = orderno,
		product = cart.product,
		user = cart.user,
		amount = cart.amount,
		status = OrderStatus.notPaid.value
	)
return R.ok("checkout success")

寫完之後,我們可以用postman進行測試:
https://ithelp.ithome.com.tw/upload/images/20211001/20141666nEi4AgScXa.png
https://ithelp.ithome.com.tw/upload/images/20211001/20141666o98zWGKbJi.png

接著我們到usercart的地方,設定如果是status 1才回傳資料:

if request.method == "GET":
	user = User.objects.filter(name = username)
	if not user:
		return R.badRequest("User does not exist")
	user = user[0]
	carts = Cart.objects.filter(user = user).filter(status = CartStatus.activate.value)
	carts = [i.toJson() for i in carts]
	return R.ok(carts)

接著做測試:
https://ithelp.ithome.com.tw/upload/images/20211001/20141666TMdlZvOVrM.png

就可以看到已結帳的購物車不會再出現了。

到此為止結帳的部分功能已經簡易做出來了,而之後我們付款的部分將會串金流 – paypal,讓這個購物網站更加完整。

================================◉‿◉=================================

Day17結束了!今天我們完成了結帳的新增訂單API,而明天我們將完成前端的結帳新增訂單,See ya next day!


上一篇
Day16:16 - 購物車服務(4) - 前端 - 購物車數量增減、刪除
下一篇
Day18:18 - 結帳服務(2) - 前端 - 結帳、訂單新增、結帳成功畫面
系列文
30天肝出購物網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言