17.5 展示购物车缩略信息

分析

在商城首页、商品列表页、商品详情“我的购物车”,鼠标悬停时,以下拉框形式展示购物车缩略信息。

展示购物车缩略信息使用GET方式向后端发请求,获取 redis 和cookie中的购物车数据,不需要请求参数。响应数据为JSON,格式为:

{
	"code":"0",
	"errmsg":"OK",
	"cart_skus":[
        {
            "id":1,
            "name":"Apple Macbook pro 13.3英寸笔记本 银色",
            "count":1,
            "default_image_url":"http://...."
        },
        ...
    ]
}

实现

在carts应用views.py中增加CartsSimpleView视图类

class CartsSimpleView(View):
    def get(self, request):
        """购物车缩略图"""
        user = request.user

        if user.is_authenticated:
            # 登录状态
            redis_conn = get_redis_connection('carts')
            redis_cart = redis_conn.hgetall('cart_%s' % user.id)
            cart_selected = redis_conn.smembers('selected_%s' % user.id)

            cart_dict = {}
            for sku_id, count in redis_cart.items():
                cart_dict[int(sku_id)] = {
                    'count': int(count),
                    'selected': sku_id in cart_selected
                }
        else:
            # 未登录
            cart_str = request.COOKIES.get('carts')
            if cart_str:
                cart_dict = pickle.loads(base64.b64decode(cart_str))
            else:
                cart_dict = {}

        # 响应数据
        cart_skus = []
        sku_ids = cart_dict.keys()
        skus = SKU.objects.filter(id__in=sku_ids)

        for sku in skus:
            cart_skus.append({
                'id': sku.id,
                'name': sku.name,
                'count': cart_dict.get(sku.id).get('count'),
                'default_image_url': settings.STATIC_URL + 'images/goods/' + sku.default_image.url + '.jpg',
            })

        return JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'cart_skus': cart_skus})

在carts应用下urls.py中新增路由

path('carts/simple/', views.CartsSimpleView.as_view()),

将index.html list.html detail.html三个页面中之前补注释掉的“我的购物车”解注,鼠标移到上面就可看到效果。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值