前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-生鲜电商-更新购物车数据

Django实战-生鲜电商-更新购物车数据

作者头像
小团子
发布2019-07-18 16:11:08
6140
发布2019-07-18 16:11:08
举报
文章被收录于专栏:数据云团数据云团

同样,用户更新购物车信息,需要判断商品是否存在,如果用户未登录,将商品数据保存在 cookie 中;如果用户已登录,将获取的更新数据保存在 redis 中。

① 获取参数

代码语言:javascript
复制
sku_id = request.POST.get("sku_id")  # 商品id
count = request.POST.get("count")  # 商品数量

② 参数校验

代码语言:javascript
复制
if not all([sku_id, count]):
    return JsonResponse({"code": 1, "message": "参数不完整"})

③ 判断商品是否存在

代码语言:javascript
复制
try:
    sku = GoodsSKU.objects.get(id=sku_id)
except GoodsSKU.DoesNotExist:
    return JsonResponse({"code": 2, "message": "商品不存在"})

④ 判断库存

代码语言:javascript
复制
if count > sku.stock:
    return JsonResponse({"code": 4, "message": "库存不足"})

⑤ 更新购物车数据

代码语言:javascript
复制
class UpdateCartView(View):
    """更新购物车数据"""
    def post(self, request):
        # 获取参数
        sku_id = request.POST.get("sku_id")  # 商品id
        count = request.POST.get("count")  # 商品数量

        # 校验参数
        if not all([sku_id, count]):
            return JsonResponse({"code": 1, "message": "参数不完整"})

        # 判断商品是否存在
        try:
            sku = GoodsSKU.objects.get(id=sku_id)
        except GoodsSKU.DoesNotExist:
            return JsonResponse({"code": 2, "message": "商品不存在"})

        # count是否是整数
        try:
            count = int(count)
        except Exception:
            return JsonResponse({"code": 3, "message": "数量异常"})

        # 判断库存
        if count > sku.stock:
            return JsonResponse({"code": 4, "message": "库存不足"})

        # 保存购物车数据
        if not request.user.is_authenticated():
            # 如果用户未登录,保存在cookie中
            cart_json = request.COOKIES.get("cart")
            if cart_json is not None:
                cart = json.loads(cart_json)
            else:
                cart = {}
            # 将商品的数据保存到购物车中
            cart[sku_id] = count
            # 将购物车数据保存到cookie中
            response = JsonResponse({"code": 0, "message": "修改成功"})
            response.set_cookie("cart", json.dumps(cart))
            return response
        else:
            # 如果用户已登录,保存在redis中
            user_id = request.user.id
            redis_conn = get_redis_connection("default")
            redis_conn.hset("cart_%s" % user_id, sku_id, count)
            return JsonResponse({"code": 0, "message": "修改成功"})
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档