购物车应该存储那些数据
sku_id
(商品ID)count
(购买数量)selected
(是否被勾选)
- 登录用户: 允许使用服务器资源
- 存储到 redis,每条数据分两种格式存储(为了演示,所以这么搞)
- Set:{sku_id_1,sku_id_2......} # 有放入集合(自带去重功能),就表示已勾选
- Hash:dict {sku_id_1:count,sku_id_2:count......}
- 如果是效率搞,可以这么设计,为每个用户创建一个hash: cart_user_id
- 里面存储 {sku_id:sku_id,count:xxx,selected:true}
- 未登录用户: 不允许使用服务器资源
- 存储到 浏览器cookie(存到 localStorage也可以...,为了演示cookie的使用,所以这么搞)
- cookie中只能存储'键值对',key-value都是必须是str类型
- response.set_cookie('cart','value','过期时间')
- 类似的数据格式:
{
sku_id_1:{'count':1,'selected':true},
sku_id_2:{'count':1,'selected':true}
}
pickle模块(比json模块高效)和base64模块(简单加密/解密)---简单使用
pickle模块
(将数据在str
和bytes
之间转换): 提供了对于 python 数据的序列化操作,可以将数据转换为 bytes 类型pickle.dumps()
: 将 python 数据序列化为 bytes 类型pickle.loads()
: 将 bytes 类型数据反序列化为 python 的数据类型( 字典, 对象等 )
import pickle
data = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
bytes_data = pickle.dumps(data)
print(bytes_data) # b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00......
dict_data = pickle.loads(bytes_data)
print(dict_data) # {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
如果使用
str.encode()
或者bytes.decode()
太过于直观...
base64模块
:把bytes
类型数据,作进一步'加密'/'解密'处理
import base64
bytes_data = b'king'
encode_bytes_data = base64.b64encode(bytes_data)
print(encode_bytes_data) # b'a2luZw=='
decode_bytes_data = base64.b64decode(encode_bytes_data)
print(decode_bytes_data) # b'king'
标签:count,sku,selected,bytes,购物车,美多,data,id,商城
From: https://www.cnblogs.com/qinganning/p/17296763.html