对购物车模块的理解

购物车增加

请求方式 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中

购物车查询

请求方式  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. 序列化后返回给前端

修改购物车数据

请求方式 : 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信息

猜你喜欢

转载自www.cnblogs.com/whigym/p/10050623.html