专栏首页数据云团Django实战-生鲜电商-购物车信息

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

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

response.set_cookie("cart", new_cart_json)

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

① 购物车信息

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)

本文分享自微信公众号 - 数据云团(SmartData),作者:云团小楠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 并发篇-python传输模型

    主要提供序列化的、可靠的、不重复的数据,它可以将消息拆分成多个片段,确保每一条片段都顺利到达目的地,然后按照顺序组合在一起,最后将完整的消息传递给正在等...

    小团子
  • Django实战-生鲜电商-加入购物车

    用户在进入个人中心前,都需要判断用户是否登录。在加入购物车之前,判断商品是否存在。如果用户已登录,则保存购物车数据到redis中;操作redis,保存购物车数据...

    小团子
  • Django实战-生鲜电商-用户地址|订单确认

    在完成登录到用户提交订单,这一系列的类视图函数,会发现有大量的数据读写操作,像电商这类的项目,更多的是用户在浏览页面的次数比较多,所以在数据查询的场景中都会采用...

    小团子
  • 利用canvas实现毛笔字帖(三)

    3. 第3部分controller.js 这一部分的功能就是要修改毛笔的颜色,还有清空画布。 功能简单,我们一起向下讲。 一开始依然是init controll...

    用户1394570
  • python画时间序列散点图

    在运维管理中,经常遇到时间序列的数据,比如网卡流量、在线用户数、并发连接数,等等。用散点图可以直观的查看数据的分布情况。

    py3study
  • Android 创建与解析XML(三)—— Sax方式

    SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件...

    阳光岛主
  • RS Meet DL(59)-FM家族的新朋友FAT-DeepFFM

    今天给大家介绍的文章标题是:《FAT-DeepFFM: Field Attentive Deep Field-aware Factorization Machi...

    石晓文
  • CraftyJS 学习二 -- Event

    当你使用 trigger 方法触发事件时,第二个参数将作为事件的参数传递到对象中。此外,还可以定义更复杂的参数类型,例如:

    tonglei0429
  • 面试题16(以下java程序输出什么?)

    以下java程序输出什么? public class HelloSoGou { public static synchronized void main(St...

    Java学习
  • 关于ATS的测试检验

    6月14日在WWDC 2016开发者大会上,苹果宣布了一个最后期限:2017年1月1日起,所有新提交到App Store的app和app更新都必须启用 App ...

    freesan44

扫码关注云+社区

领取腾讯云代金券