阿语python美多商城-商品-购物车管理之第7.2.6节合并购物车

news/2024/5/18 16:10:14 标签: 数据库, cookie, redis, session, python

合并购物车

需求:用户登录时,将cookie购物车数据合并Redis购物车数据中。

提示:

  • QQ登录账号登录时都要进行购物车合并操作。

1. 合并购物车逻辑分析

1.合并方向:cookie购物车数据合并到Redis购物车数据中。
2.合并数据:购物车商品数据和勾选状态。
3.合并方案:
    3.1 Redis数据库中的购物车数据保留。
    3.2 如果cookie中的购物车数据在Redis数据库中已存在,将cookie购物车数据覆盖Redis购物车数据。
    3.3 如果cookie中的购物车数据在Redis数据库中不存在,将cookie购物车数据新增到Redis。
    3.4 最终购物车的勾选状态以cookie购物车勾选状态为准。

2. 合并购物车逻辑实现

新建文件:carts.utils.py

def merge_cart_cookie_to_redis(request, user, response):
    """
    登录后合并cookie购物车数据到Redis
    :param request: 本次请求对象,获取cookie中的数据
    :param response: 本次响应对象,清除cookie中的数据
    :param user: 登录用户信息,获取user_id
    :return: response
    """
    # 获取cookie中的购物车数据
    cookie_cart_str = request.COOKIES.get('carts')
    # cookie中没有数据就响应结果
    if not cookie_cart_str:
        return response
    cookie_cart_dict = pickle.loads(base64.b64decode(cookie_cart_str.encode()))

    new_cart_dict = {}
    new_cart_selected_add = []
    new_cart_selected_remove = []
    # 同步cookie中购物车数据
    for sku_id, cookie_dict in cookie_cart_dict.items():
        new_cart_dict[sku_id] = cookie_dict['count']

        if cookie_dict['selected']:
            new_cart_selected_add.append(sku_id)
        else:
            new_cart_selected_remove.append(sku_id)

    # 将new_cart_dict写入到Redis数据库
    redis_conn = get_redis_connection('carts')
    pl = redis_conn.pipeline()
    pl.hmset('carts_%s' % user.id, new_cart_dict)
    # 将勾选状态同步到Redis数据库
    if new_cart_selected_add:
        pl.sadd('selected_%s' % user.id, *new_cart_selected_add)
    if new_cart_selected_remove:
        pl.srem('selected_%s' % user.id, *new_cart_selected_remove)
    pl.execute()

    # 清除cookie
    response.delete_cookie('carts')

    return response

3. 账号和QQ登录合并购物车

users.views.pyoauth.views.py文件中调用合并购物车的工具方法

# 合并购物车
response = merge_cart_cookie_to_redis(request=request, user=user, response=response)

http://www.niftyadmin.cn/n/739730.html

相关文章

阿语python美多商城-商品-购物车管理之第7.2.4节删除购物车

删除购物车提示:在购物车页面删除购物车使用局部刷新的效果。1. 删除购物车接口设计和定义1.请求方式选项方案请求方法DELETE请求地址/carts/2.请求参数:JSON参数名类型是否必传说明sku_idint是商品SKU编号3.响应结果:JSON字段说明code状态码…

阿语python美多商城-商品-购物车管理之第7.2.3节修改购物车

提示:在购物车页面修改购物车使用局部刷新的效果。1. 修改购物车接口设计和定义1.请求方式选项方案请求方法PUT请求地址/carts/2.请求参数:JSON参数名类型是否必传说明sku_idint是商品SKU编号countint是商品数量selectedbool否是否勾选3.响应结果&#x…

阿语python美多商城-商品-商品详情页之第6.7.2节保存和查询浏览记录

1. 保存用户浏览记录1.请求方式选项方案请求方法POST请求地址/browse_histories/2.请求参数:JSON参数名类型是否必传说明sku_idstring是商品SKU编号3.响应结果:JSON字段说明code状态码errmsg错误信息4.后端接口定义和实现class UserBrowseHistory(LoginR…

阿语python美多商城-商品-购物车管理之第7.2.5节全选购物车

全选购物车提示:在购物车页面修改购物车使用局部刷新的效果。1. 全选购物车接口设计和定义1.请求方式选项方案请求方法PUT请求地址/carts/selection/2.请求参数:JSON参数名类型是否必传说明selectedbool是是否全选3.响应结果:JSON字段说明cod…

阿语python美多商城-商品-购物车管理之第7.2.2节展示购物车

1. 展示购物车接口设计和定义1.请求方式选项方案请求方法GET请求地址/carts/2.请求参数:无3.响应结果:HTMLcart.html4.后端接口定义class CartsView(View):"""购物车管理"""def get(self, request):"""展示…

阿语python美多商城-商品-购物车管理之第7.2.1节添加购物车

提示:在商品详情页添加购物车使用局部刷新的效果。1. 添加购物车接口设计和定义1.请求方式选项方案请求方法POST请求地址/carts/2.请求参数:JSON参数名类型是否必传说明sku_idint是商品SKU编号countint是商品数量selectedbool否是否勾选3.响应结果&#…

阿语python美多商城-商品-购物车之第7.1节购物车存储方案

购物车存储方案用户登录与未登录状态下,都可以保存购物车数据。用户对购物车数据的操作包括:增、删、改、查、全选等等每个用户的购物车数据都要做唯一性的标识。1. 登录用户购物车存储方案1.存储数据说明如何描述一条完整的购物车记录?用户i…

阿语python美多商城-订单-提交订单之第8.2.4节使用乐观锁并发下单

使用乐观锁并发下单重要提示:在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。1. 并发下单问题演示和解决方案解决办法:悲观锁…