购物车的增删查改、全选与单选
API设计
功能 | 添加购物车 |
---|---|
请求方式 | POST |
请求地址 | /goods/user/cart/ |
POST参数 | productID: this.productID |
headers参数 | token:用户jwt |
成功 | 1.添加购物车成功 { “code”:200, “msg”:“新加入购物车成功”, “shoppingCartData”:{ id: “”, // 购物车id, 如cart_1 productID: “”, // 商品id productName: “”, // 商品名称 productImg: “”, // 商品图片 price: “”, // 商品价格 num: “”, // 购物车中该商品数量 maxNum: “”, // 商品限购数量,即库存 check: false // 是否勾选 } } 2.加购 {“code”:201, “msg”:“该商品已经在购物车,数量+1”} |
失败 | {”code“:202, “msg”:“加购达到限购数量!”} {’code‘:203, ‘msg’:‘库存不足,无法购买!’} {“code”:204, “msg”:’其他异常‘} |
思路分析:
- 判断用户是否登录
- 获取商品信息
- 判断是否有库存
- 判断购物车是否存在该商品
- a) 新增商品到购物车
- b)加购
- I)加购成功,数量+1
- II):"加购达到限购数量
class UserCart(APIView):
def post(self,request):
# 1.判断用户是否登录
try:
user_info=request.user_info
user = User.objects.get(id=user_info.get("id"))
except Exception as e:
print(e)
return Response({
'msg': '用户不存在或未登录', 'code': 204})
# 2.获取商品id
good_id=request.data.get('productID')
good_data=Goods.objects.get(id=good_id)
# 拼接购物车 键
cart_key=f'cart_{
user.username}'
# 添加购物车的商品自动选中
cart_selected_key=f'cart_selected_{
user.username}'
# 3.判断库存
if good_data.stock<=0:
return Response({
'msg': '库存不足', 'code': 203})
# 4.判断购物车是否存在此商品
r=redis.Redis(host='localhost',port=6379,db=0)
# 获取商品在购物车中的数量
num=r.hget(cart_key,good_id)
if num: #购物车已存在该商品
num=int(num.decode())+1
if num>good_data.stock:
r.close()
return Response({
'msg': '加购达到限购数量', 'code': 202})
r.hset(cart_key,good_id,str(num)) #购物车数量+1
r.sadd(cart_selected_key,good_id) #选中商品
return Response({
'msg': '此商品已存在,数量+1', 'code&#