1、购物车因为是高频刷新部分,同时对数据关系结构的要求并非很复杂,因此选取nosql作为存储工具;
2、前后端需要对接4个参数,分别是用户id,商品编码即sku_id,多少件商品count以及是否勾选 selected;
3、Redis有5种数据类型,分别为string、list、hash、set、zset。而本次的4个参数,数量超过了单一种数据结构的控制范围,因此选用2个数据结构进行共同维护;
4、用户id,skuid以及count采用hash结构,即:
cart_user_id:{sku_id1:count,sku_id2:count,sku_id3:count....}
5、用户id和选中的商品使用set维护,因为购物车不要求先后顺序,且set结构可自动去重,
select_user_id:[sku_id1,sku_id3.....]
6、后期维护购物车数据时,2个表同时进行,例如删掉hash里面sku_id1的时候,selected里面的也要同时删掉。
7、在hash中每次添加商品时,先遍历购物车中的商品是否已有,如果已有,则累加count,如果没有再加新的。使用hincrby函数
8、当进入到结算页面是,是将已经勾选的商品进行结算,因此需要将两个Redis表进行结合,构造一个字典为 new_cart_dict = {sku_id:count}
9、遍历select_user_id,遍历出来的sku_id 就是新表的key,然后用这个key去查询cart_user_id表中相同的sku_id然后将其count给到新表即可
new_cart_dict = {}
for selected_sku_id in select_user_id:
new_cart_dict[int(selected_sku_id)] = int(cart_user_id[sku_id])
10、然后进入提交订单页面,即在 new_cart_dict提取选中的商品信息和数量,然后响应给前端页面,此外根据request.user找到用户未删除的地址,一起响应给前端。
11、此外还需要响应给前端的数据通常包括总件数、总价格、运费,总价格 等等,通过context={'addresses':'','skus':'','total_count':'','total_amount':'','freight':''}结构来实现
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。