python3 之 天天生鲜 我的购物车
加入购物车:
实现:
登录状态(商品存入数据库) 与 非登录状态( 商品暂时加入cookie 等待登录合并数据库)
进入购物车:
实现:
登录状态 与 非登录状态 购物车信息
#登陆状态 从数据库中获取购物车信息 if request.user.is_authenticated(): #创建 django-redis客户端 链接setting-cache 默认数据库5 redis_conn = get_redis_connection('default') #获取用户id user_id = request.user.id #查询数据库 获得所有的 field(sku_id) 和 value(count) 的对象 cart_dict = redis_conn.hgetall('cart_%s'%user_id)
#非登录状态 从cookies中获取商品信息
else: #从cookie 中获得购物车数据 cart_json = request.COOKIES.get('cart') #判断 cart_json 不是空的 != None也可以 if cart_json is not None: #课件方法 #加载 并进行 数据转换 cart_dict = json.loads(cart_json) else: cart_dict = {}
获取信息展示:
# 定义商品列表 skus = [] # 初始 总金额 total_amount = 0 # 初始 总数量 total_count = 0 # 遍历 获得总数量 总价格 及商品信息 for sku_id, count in cart_dict.items(): # items:字典里获得所有key和value # 获取商品 try: sku = GoodsSKU.objects.get(id=sku_id) except GoodsSKU.DoesNotExist: # 商品不存在 时 则继续 循环 continue # 购物车数据为字节 转化为数字 count = int(count) # 计算该商品总价格 amount = sku.price * count # 动态添加该商品 总数和总价属性 方便sku调用 sku.amount = amount sku.count = count # 把商品添加list- skus 在模板里调用 skus.append(sku) # 计算 商品总价和总数量 total_amount += amount total_count += count # 构建上下文 context = { 'skus': skus, 'total_amount': total_amount, 'total_count': total_count, } # 购物车 cart_num = 0 # 自定义购物车函数 cart_num = cartnum(request, cart_num) # 字典更新 /添加 购物车数量 context.update(cart_num=cart_num) return render(request,'cart.html',context)