业务分析
- 什么时候添加购物车记录?
当用户点击加入购物车时需要添加购物车记录
- 什么时候需要获取购物车记录?
获取购物车数目和访问购物车页面时
- 使用什么数据库存储?
需要频繁操作数据库,使用redis数据库可以提高效率
- 存储格式?
一个用户的购物车记录使用一条数据保存
string,list,hash,set,zset => hash
'cart_用户id':{'商品id1':商品数目, '商品id2': 商品数目}
具体分析
-
添加购物车
添加购物车时页面无跳转,采用Ajax,post方法(涉及到数据的增,删,改均采用post方法,只涉及到数据的获取,采用get),
前端需要传递的参数:商品id,商品数量
具体步骤如下:
1.判断是否登录
使用user对象的.is_authenticated()方法进行校验,
未登录则
2.接收数据
3.数据校验:数据是否完整,增加数量,商品是否存在
4.业务处理,添加购物车记录
·获取与redis连接对象
·根据user.id构造cart_key
·通过hget(cart_key, sku_id)获取sku_id的值,即原有商品数量
如果sku_id不存在,则返回None,否则累加传入的数量
·校验库存,如果添加的数量小于库存,则通过
hset(cart_key, sku_id, count)设置sku_id的值,
如果sku_id存在,则更新,不存在则添加
·通过hlen(cart_key, sku_id, count)计算用户购物车商品条目
- 购物车页面/get
具体步骤如下:
·判断用户是否登录
·获取登录的用户,通过用户id构建cart_key
·根据cart_key通过hgetall(cart_key)获取用户购物车中商品的信息
·遍历此字典,拿到sku_id和count,通过sku_id查询数据库获取商品信息,计算商品小计和商品数量,动态给sku对象添加小计和数量属性
·没遍历一次,累加一次商品总数目和总价格,并返回给前端
- 更新购物车商品总件数
更新购物车记录,采用Ajax post请求,需要传递参数:商品id(sku_id),更新的商品数量(count)
与添加购物车类似,主要核心业务如下:
·是否登录
·接收数据
·检验商品数量,商品是否存在:通过sku_id查询数据库
·构建cart_key
·校验库存,通过则hset(cart_key, sku_id, count)更新数据
·计算用户购物车中商品的总种类数:
通过hvals(cart_key)获取所有值并返回列表,设置tatal_count初始为0,遍历列表进行累加
- 删除购物车记录
删除购物车记录,Ajax post请求,前端需要传的参数:商品id(sku_id)
具体核心步骤如下:
·验证是否登录
·接收参数,校验sku_id是否有效,对应商品是否存在
·业务处理,删除商品
构建redis连接,通过hdel(cart_key, sku_id)进行删除