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.userif 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三个页面中之前补注释掉的“我的购物车”解注,鼠标移到上面就可看到效果。