Day23:23 - 结帐服务(7) - 後端 - 总订单资料、订单详情API

ନମସ୍କାର,我是Charlie!
在Day22当中我们完成了前端的paypal结帐,而今天我们将完成後端的订单资料API。

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

首先是总订单资料的部分,先在logincheck方法当中新增GET:

@logincheck('POST','GET')

接着在userorder方法当中新增order get的程序码,把user的order都过滤出来:

if request.method == "GET":
	req = request.GET
	if "username" not in req:
		return R.badRequest("username not found")
	username = req["username"]
	user = User.objects.filter(name = username)
	if not user:
		return R.badRequest("user does not exist")
	user = user[0]
	userorder = Order.objects.filter(user = user)

再来我们要整理一下返回资料的格式,同一个orderno会有一个products的栏位,里面有这个订单所有包含的product:

data = []
for order in userorder:
	for d in data:
		if order.orderno == d["orderno"]:
			d["products"].append(order.product.toJson())
			d["amount"] += order.amount
			break
	else:
		data.append({
			"orderno":order.orderno,
			"products":[
				order.product.toJson()
			],
			"username":order.user.name,
			"amount":order.amount,
			"status":order.status,
			"paypal_id":order.paypal_id,
			"created_time":order.created_time,
			"modified_time":order.modified_time
		})
return R.ok({"data":data})

接着做测试,就可以看到同一个订单内的商品都已经归到了products里面:
https://ithelp.ithome.com.tw/upload/images/20211007/20141666RIHjzFMsHM.png

接着是订单详情的部分,首先建立一个url pattern:

url(r'/(?P<orderno>[0-9A-Za-z]{22})$',views.userorder),

接着建立程序码,过滤出order中符合orderno跟username的Order:

@logincheck('POST','GET')
	if request.method == "GET" and orderno:
		req = request.GET
		if "username" not in req:
			return R.badRequest("username not found")
		username = req["username"]
		user = User.objects.filter(name = username)
		if not user:
			return R.badRequest("user does not exist")
		user = user[0]
		userorder = Order.objects.filter(user = user).filter(orderno = orderno)
		if not userorder:
			return R.badRequest("order does not exist")

		data = {}
		for order in userorder:
			if "orderno" not in data:
				product = order.product.toJson()
				product["amount"] = order.amount
				product["subtotal"] = order.amount * product["price"]
				data = {
					"id":order.id,
					"orderno":order.orderno,
					"products":[
						product
					],
					"username":order.user.name,
					"amount":order.amount,
					"paypal_id":order.paypal_id,
					"created_time":order.created_time,
					"modified_time":order.modified_time,
					"orderStatus":order.status,
					"phone":order.user.phone,
				}
			else:
				product = order.product.toJson()
				product["amount"] = order.amount
				product["subtotal"] = order.amount * product["price"]
				data["products"].append(
					product
				)
				data["amount"] += order.amount
			print(data)
		return R.ok(data)

接着做测试:
https://ithelp.ithome.com.tw/upload/images/20211007/20141666AHGwrDwEIu.png

就完成了订单详情跟总资料的API。

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

Day23结束了!在今天我们完成了总订单跟订单详情的API,明天我们将完成前端的订单跟订单详情,See ya next day!


<<:  学习Python纪录Day22 - 用Kaggle上的dataset当例子

>>:  近似最短路径 (3)

SEO营销

SEO代表搜索引擎优化(SEO),这是通过自然搜索引擎性能提高网站流量的数量和一致性的过程。它旨在改...

RestTemplate介绍(Day10)

熟悉JWT的我敲开了大门的门锁,走进了房间 同学:来,你过来~~ 我:干嘛啦 (被推着坐下),哇,同...

迈向CISSP成功之路(读书心得)

考取CISSP是一条艰辛的路,但是没有辛苦过哪来甜蜜的果实, 本身考取cissp提供以下几点的方式提...

新新新手阅读 Angular 文件 - Day07

学习目标 本文章将会是阅读官方文件Add navigation with routing 内容所做的...

[ Day 1 ] - 变数与型别

变数与型别 变数是什麽呢? 把他想成是一个容器,容器可以存放需要的资讯,这一个资讯可以是一段文字、一...