Day15:15 - 购物车服务(3) - 後端 - 购物车数量增减、删除API

Kamusta,我是Charlie!
在Day14中,我们完成了前端的购物车商品显示跟加入购物车,而今天,我们将完成购物车数量增减跟删除的後端API。

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

首先是加减购物车,因为我们是spinButton,所以会用v-model的值来判断,我们的API就是依照数量来做加减。
先新增PUT方法,去修改相对应的购物车数量。
一样要新增判断,判断amount为0、product找不到、user找不到都会返回对应的讯息,如果都OK的话就指定amount回去,然後save:

elif request.method == "PUT":
	req = request.body
	ucart = CartModel()
	ucart.fromJson(req)
	if ucart.amount == 0:
		return R.badRequest("Cart amount can not be 0")
	product = Product.objects.filter(id = ucart.product_id)
	if not product:
		return R.badRequest("Product does not exist!")
	product = product[0]
	if ucart.amount > product.stored_amount:
		return R.badRequest("Add cart amount reach maximum stored amount")
	user = User.objects.filter(name = ucart.username)
	if not user:
		return R.badRequest("User does not exist!")
	user = user[0]
	dbcart = Cart.objects.filter(user = user).filter(product = product)
	dbcart = dbcart[0]
	dbcart.amount = ucart.amount
	dbcart.save()
	return R.ok("amount change success")

接着测试:
https://ithelp.ithome.com.tw/upload/images/20210929/20141666RCyoej7lo5.png

再来是DELETE的部分,一样新增DELETE方法:

elif request.method == "DELETE":

由於DELETE方法不应该带任何的request body,所以我们需要用url带参数,首先修改url pattern:

url(r'/(?P<cid>[\d]{1,55})$',views.usercart),

并且增加cid参数,再判断delete,执行相对应的方法:

def usercart(request,username = None,cid = None):
elif request.method == "DELETE" and cid is not None:
	cid = int(cid)
	cart = Cart.objects.filter(id = cid)
	if not cart:
		return R.badRequest("Cart record does not exist")
	cart = cart[0]
	cart.delete()
	return R.ok("delete success")

测试:
https://ithelp.ithome.com.tw/upload/images/20210929/20141666qaS87maDeJ.png
https://ithelp.ithome.com.tw/upload/images/20210929/20141666MvE1vbofRq.png

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

Day15结束了!在今天我们完成了後端的购物车数量改变跟删除,而明天我们将完成前端的购物车数量改变跟删除,See ya next day!


<<:  Flipper

>>:  爬虫怎麽爬 从零开始的爬虫自学 DAY15 python回圈

Day27:歪楼+卡文(全英文笔记 - I)

铁人赛写到现在,其实主题中的内容还有很多可以实作的部分,但一方面是不确定时间到期後,铁人赛系列还能不...

React状态计算解密

点击进入React源码调试仓库。 概述 壹旦用户的交互产生了更新,那麽就会产生壹个update对象去...

Extra06 - TypeScript - 型别检查工具

此篇为番外,未收入在本篇的原因是 TypeScript 会直接影响开发,使撰写的程序语法与原本不同...

新新新手阅读 Angular 文件 - Component - ngOnDestroy(2) - Day26

本文内容 接续昨天 ngOnDestroy 还没有记录完的内容。 ngOnDestroy 可能没被启...

从 JavaScript 角度学 Python(30) - 爬虫

前言 前面我们也已经学了不少的知识点,而这边也进入了铁人赛的最後一天,所以就来试着写一个简单的 it...