Day17:17 - 结帐服务(1) - 後端 - 结帐、订单新增API

Здравейте,我是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!


<<:  Day 16 编辑器 — VSCode

>>:  第16车厢-提示我一下嘛!bootstrap-tooltip应用篇

【Day-27】我们是怎麽开始的?:一间传统软件公司从 0 开始建置的 DevOps 文化(工具篇)- 头脑风暴

前言 昨天我们介绍了高品质工作四部法,今天让我们来介绍头脑风暴。 头脑风暴,是一种为激发创造力、强化...

小产品跟大产品都可以通用的决策系统:Randomized AB Test

疫苗在台湾第一次吵得沸沸扬扬时,我也被各种有孔没笋的消息搞得莫名其妙,为了跟人争辩时不要说错话,闲人...

Day19:【技术篇】无障碍检测(freego)方式

一、前言   这篇要介绍的是当你的网站要申请无障碍标章时,必须要做的「无障碍检测」。一个好的网站,是...

21 "准备完成" 用 PubSub 同步更新网页

拉出 component Component 除了在同一个 module 用之外也能拉出来放 我们来...

Day#04 TableView

前言 承接昨天的内容,今天来加上viewDidLoad中的逻辑内容{ @•̀ꈊ•́@ } 学习资源 ...