# 购物车存储方案
- 如果用户未登录则保存在cookie中
```
{
商品编号:{
count:
selected:
},
商品编号:{
count:
selected:
}
...
}
将字典与字符串相互转换:json,loads,dumps
新的字典与bytes类型转换包:pickle,loads,dumps
优点:转换效率高,尤其是字典的值嵌入字典时
加解密:base64,加密b64encode(),解密b64deocde
```
- 如果用户已登录则保存在redis中
```
python代码:
cart1={
'sku_id':2
商品编号:商品数量
1:2,
2:2,
3:1,
}
选中状态:set[商品编号,1,2,3]
如果集合中有某个商品编号,表示这个商品在购物车中是选中状态
如果集合中没有某个商品编号,表示这个商品在购物车中是未选中状态
hash类型的命令
添加、修改:hset key 商品编号 数量
删除:hdel key 商品编号
读取:hgetall key
key='cart%d'%requst.user.id
set类型的命令
添加:sadd key 商品编号
删除:srem key 商品编号
读取:smembers key
key='selected%d'%request.user.id
```
# 购物车添加
- 判断用户是否登录,如果登录则操作redis,如果未登录则操作cookie
- 接收:商品编号,数量
- 验证:商品编号的正确性,数量的合法性
- 处理:判断,保存数据
- 未登录时,先从cookie中读取购物车信息,修改字典,再写cookie
- 已登录时,写hash、set
- 响应
# 购物车列表
- 不需要接收、验证数据
- 处理:判断,读取购物车数据,根据商品编号查询商品对象
- 响应:渲染html页面
- 说明:为了重用商品的查询代码,将cookie中读取的数据,结构转换为与redis中结构一致
# 购物车修改
- 修改数量
- 修改选中状态
- 在vue中为单选框、加按钮、减按钮、文本框绑定事件
- 整体代码与添加基本一致
- 说明:选中状态的代码不同
# 购物车删除
- 接收商品编号,从redis或cookie中删除
# 总结
### 重要知识点
- 购物车添加、查询、修改、删除
- redis中操作hash的命令:hset,hgetall,hdel
- redis中操作set的命令:sadd,smembers,srem
- 字典与字符串转换:pickle+base64 |
|