Здравейте,我是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進行測試:
接著我們到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)
接著做測試:
就可以看到已結帳的購物車不會再出現了。
到此為止結帳的部分功能已經簡易做出來了,而之後我們付款的部分將會串金流 – paypal,讓這個購物網站更加完整。
================================◉‿◉=================================
Day17結束了!今天我們完成了結帳的新增訂單API,而明天我們將完成前端的結帳新增訂單,See ya next day!