分析
在商城首页、商品列表页、商品详情“我的购物车”,鼠标悬停时,以下拉框形式展示购物车缩略信息。
展示购物车缩略信息使用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三个页面中之前补注释掉的“我的购物车”解注,鼠标移到上面就可看到效果。


544

被折叠的 条评论
为什么被折叠?



