对购物车模块的理解

购物车增加

1. 后端接口设计

请求方式 post

请求参数  sku_id,count,selected

参数类型是否必须说明
sku_id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选

返回参数  sku_id,count,selected  

参数类型是否必须说明
sku_id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选

购物车数据读写比较频繁,对于已登录用户可以保存在redis中。对于未登录用户可保存在cookie中。

redis保存已登录用户

说明:

  1. 每个用户可以保存多个商品与其数量对应,所以选择redis哈希类型保存
  2. 对于勾选状态,只需要保存已勾选商品的sku_id,不要求有序,不重复。所以选择redis的set类型存储

cook保存未登录用户

{
    sku_id: {
        "count": xxx,  // 数量
        "selected": True  // 是否勾选
    },
    sku_id: {
        "count": xxx,
        "selected": False
    },
    ...
}

cookie中只能保存字符串,可以使用pickle将上面的数据类型序列化为bytes类型,因为它序列化速度比json要高。

将序列化得结果进行base64编码得到的仍然是bytes再进行encode的到str 设置到cookie中

购物车查询

1. 后端接口设计

请求方式  get  /cart/

返回数据

参数类型是否必须说明
id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选
name str 商品名称
default_image_url str 商品默认图片
price decimal 商品单价

视图的业务逻辑

  1. 判断用户登录状态
  2. 登录用户从redis中查询加入购物车的商品
  3. 未登录用户从cookie中获取加入购物车的shangpin
  4. 从mysql sku表中查询商品(获取图片,价格等信息)
  5. 序列化后返回给前端

修改购物车数据

1. 后端接口设计

请求方式 : PUT /cart/

请求参数: JSON 或 表单

参数类型是否必须说明
sku_id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选

返回数据: JSON

参数类型是否必须说明
sku_id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选

 需要更新的数据只有 数量和勾选状态

业务逻辑:

  1. 将接收的数据进行反序列化(验证数据的合法性)
  2. 判断用户登录状态
  3. 登录用户从更新对应redis中的数据
  4. 未登录用户更新cookie信息

删除购物车数据

1. 后端接口设计

请求方式 : DELETE /cart/

请求参数:

参数类型是否必须说明
sku_id int 商品sku id

返回数据:无,状态码204

  1. 将请求数据进行反序列化验证sku_id是否存在
  2. 判断用户登录状态
  3. 如果登录 从redis中删除指点sku
  4. 如果未登陆了从cookie中删除,当然要先判断cookie(cookie是否存在,cookie中是否存在sku_id)
  5. 返回状态码

购物车全选

1. 后端接口设计

请求方式 : PUT /cart/selection/

请求参数: JSON 或 表单

参数类型是否必须说明
selected bool 是否全选,true表示全选,false表示取消全选

返回数据:JSON

返回值类型是否必须说明
message str ok

2. 后端实现

  1. 进行反序列化验证请求参数
  2. 判断用户是否登录状态
  3. 如果登录修改redis数据(查询用户的所有商品id,将所有id加入选中集合中)
  4. 如果未登录修改cookie   

登录合并购物车

方案1:在用户登录时,将cookie中购物车数据合并到redis中,并清除cookie中的购物车数据。缺点有多少种登录方式就要调用多少上面的方法。而且要重写登录方法。

方案2:修改购物车查询接口设计,判断用户登录和cookie存在同时成立。则需要合并。

原文地址:https://www.cnblogs.com/whigym/p/10050623.html