购物车增加
请求方式 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保存已登录用户
说明:
- 每个用户可以保存多个商品与其数量对应,所以选择redis哈希类型保存
- 对于勾选状态,只需要保存已勾选商品的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 | 是 | 商品单价 |
视图的业务逻辑
- 判断用户登录状态
- 登录用户从redis中查询加入购物车的商品
- 未登录用户从cookie中获取加入购物车的shangpin
- 从mysql sku表中查询商品(获取图片,价格等信息)
- 序列化后返回给前端
修改购物车数据
请求方式 : PUT /cart/
请求参数: JSON 或 表单
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
sku_id | int | 是 | 商品sku id |
count | int | 是 | 数量 |
selected | bool | 否 | 是否勾选,默认勾选 |
返回数据: JSON
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
sku_id | int | 是 | 商品sku id |
count | int | 是 | 数量 |
selected | bool | 是 | 是否勾选,默认勾选 |
需要更新的数据只有 数量和勾选状态
业务逻辑:
- 将接收的数据进行反序列化(验证数据的合法性)
- 判断用户登录状态
- 登录用户从更新对应redis中的数据
- 未登录用户更新cookie信息