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

Django实战-生鲜电商-购物车信息

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

在上一小节中,会发现加入购物车,如果用户未登录,是将添加到购物车的商品存储在浏览器的 cookie 中;如果用户已登录,则保存购物车数据到redis中,然后是返回处理结果。

代码语言:javascript
复制
response.set_cookie("cart", new_cart_json)

同样,用户查看购物车信息,如果用户未登录,从 cookie 中取出商品数据;如果用户已登录,从redis中获取数据。

① 购物车信息

代码语言:javascript
复制
class CartInfoView(View):
    """购物车信息"""
    def get(self, request):
        """提供购物车页面"""
        # 业务逻辑, 查询购物车数据
        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:
                # cookie中不存在购物车数据
                cart = {}
        else:
            # 如果用户已登录,从redis中获取数据
            redis_conn = get_redis_connection("default")
            user_id = request.user.id
            cart = redis_conn.hgetall("cart_%s" % user_id)

        # 遍历cart字典,形成模板所需要的数据
        skus = []
        total_amount = 0  # 总金额
        total_count = 0  # 总数量
        for sku_id, count in cart.items():
            try:
                sku = GoodsSKU.objects.get(id=sku_id)
            except GoodsSKU.DoesNotExist:
                # 商品不存在
                continue
            count = int(count)
            amount = sku.price * count  # Decimal
            sku.amount = amount  # 商品的金额
            sku.count = count  # 商品的数量
            skus.append(sku)
            total_amount += amount
            total_count += count

        # 返回处理结果, 渲染模板
        context = {
            "skus": skus,
            "total_amount": total_amount,
            "total_count": total_count
        }
        return render(request, "cart.html", context)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档