zoukankan      html  css  js  c++  java
  • 合并购物车

    合并购物车逻辑分析

    1. 合并方向:cookie 购物车数据合并到 Redis 购物车数据中。
    2. 合并数据:购物车商品数据和勾选状态。
    3. 合并方案:
      1. Redis 数据库中的购物车数据保留。

      2. 如果 cookie 中的购物车数据在 Redis 数据库中已存在
        将 cookie 购物车数据覆盖 Redis 购物车数据。

      3. 如果 cookie 中的购物车数据在 Redis 数据库中不存在,
        将 cookie 购物车数据新增到 Redis。

      4. 最终购物车的勾选状态以 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
    
  • 相关阅读:
    Python 列表字典制作名册管理
    AS3获取SWF文件中AS链接
    AS3多选多模型
    AS3视频播放器
    测试
    Makefile三个有用变量$@,$^,$<
    CentOS 7.2 安装教程
    Ubuntu 查看/修改文件编码
    API 进程、线程函数
    API 菜单函数
  • 原文地址:https://www.cnblogs.com/oklizz/p/11241129.html
Copyright © 2011-2022 走看看