标签:end rem djang ase als turn response remove base64
如果 cookie 中的购物车数据在 Redis 数据库中已存在
将 cookie 购物车数据覆盖 Redis 购物车数据。
如果 cookie 中的购物车数据在 Redis 数据库中不存在,
将 cookie 购物车数据新增到 Redis。
最终购物车的勾选状态以 cookie 购物车勾选状态为准。
import base64
import pickle
from django_redis import get_redis_connection
def merge_cart_cookie_to_redis(request, response, user):
'''
合并购物车中cookie的数据到redis
:return:
'''
# 1.获取cookie的数据
cookie_cart = request.COOKIES.get('carts')
# 2.判断数据是否存在, 如过不存在, 返回
if not cookie_cart:
return response
# 3.如果存在, 解密
cart_dict = pickle.loads(base64.b64decode(cookie_cart))
new_dict = {} # hash: user_id:{sku_id:count}
new_add = []
new_remove = []
# 4.整理格式(dict add remove)
for sku_id, dict in cart_dict.items():
new_dict[sku_id] = dict.get('count')
if dict['selected']:
# true
new_add.append(sku_id)
else:
# false
new_remove.append(sku_id)
# 5.链接redis
redis_conn = get_redis_connection('carts')
# 6.往hash写入(dict)
redis_conn.hmset('carts_%s' % user.id, new_dict)
# 7.往set中增加或者删除
if new_add:
redis_conn.sadd('selected_%s' % user.id, *new_add)
if new_remove:
redis_conn.srem('selected_%s' % user.id, *new_remove)
# 8.删除cookie
response.delete_cookie('carts')
# 9.返回
return response
标签:end rem djang ase als turn response remove base64
原文地址:https://www.cnblogs.com/oklizz/p/11241129.html