zoukankan      html  css  js  c++  java
  • 对购物车模块的理解

    购物车增加

    1. 后端接口设计

    请求方式 post

    请求参数  sku_id,count,selected

    参数类型是否必须说明
    sku_id int 商品sku id
    count int 数量
    selected bool 是否勾选,默认勾选

    返回参数  sku_id,count,selected  

    参数类型是否必须说明
    sku_id int 商品sku id
    count int 数量
    selected bool 是否勾选,默认勾选

    购物车数据读写比较频繁,对于已登录用户可以保存在redis中。对于未登录用户可保存在cookie中。

    redis保存已登录用户

    说明:

    1. 每个用户可以保存多个商品与其数量对应,所以选择redis哈希类型保存
    2. 对于勾选状态,只需要保存已勾选商品的sku_id,不要求有序,不重复。所以选择redis的set类型存储

    cook保存未登录用户

    {
        sku_id: {
            "count": xxx,  // 数量
            "selected": True  // 是否勾选
        },
        sku_id: {
            "count": xxx,
            "selected": False
        },
        ...
    }

    cookie中只能保存字符串,可以使用pickle将上面的数据类型序列化为bytes类型,因为它序列化速度比json要高。

    将序列化得结果进行base64编码得到的仍然是bytes再进行encode的到str 设置到cookie中

    购物车查询

    1. 后端接口设计

    请求方式  get  /cart/

    返回数据

    参数类型是否必须说明
    id int 商品sku id
    count int 数量
    selected bool 是否勾选,默认勾选
    name str 商品名称
    default_image_url str 商品默认图片
    price decimal 商品单价

    视图的业务逻辑

    1. 判断用户登录状态
    2. 登录用户从redis中查询加入购物车的商品
    3. 未登录用户从cookie中获取加入购物车的shangpin
    4. 从mysql sku表中查询商品(获取图片,价格等信息)
    5. 序列化后返回给前端

    修改购物车数据

    1. 后端接口设计

    请求方式 : PUT /cart/

    请求参数: JSON 或 表单

    参数类型是否必须说明
    sku_id int 商品sku id
    count int 数量
    selected bool 是否勾选,默认勾选

    返回数据: JSON

    参数类型是否必须说明
    sku_id int 商品sku id
    count int 数量
    selected bool 是否勾选,默认勾选

     需要更新的数据只有 数量和勾选状态

    业务逻辑:

    1. 将接收的数据进行反序列化(验证数据的合法性)
    2. 判断用户登录状态
    3. 登录用户从更新对应redis中的数据
    4. 未登录用户更新cookie信息

    删除购物车数据

    1. 后端接口设计

    请求方式 : DELETE /cart/

    请求参数:

    参数类型是否必须说明
    sku_id int 商品sku id

    返回数据:无,状态码204

    1. 将请求数据进行反序列化验证sku_id是否存在
    2. 判断用户登录状态
    3. 如果登录 从redis中删除指点sku
    4. 如果未登陆了从cookie中删除,当然要先判断cookie(cookie是否存在,cookie中是否存在sku_id)
    5. 返回状态码

    购物车全选

    1. 后端接口设计

    请求方式 : PUT /cart/selection/

    请求参数: JSON 或 表单

    参数类型是否必须说明
    selected bool 是否全选,true表示全选,false表示取消全选

    返回数据:JSON

    返回值类型是否必须说明
    message str ok

    2. 后端实现

    1. 进行反序列化验证请求参数
    2. 判断用户是否登录状态
    3. 如果登录修改redis数据(查询用户的所有商品id,将所有id加入选中集合中)
    4. 如果未登录修改cookie   

    登录合并购物车

    方案1:在用户登录时,将cookie中购物车数据合并到redis中,并清除cookie中的购物车数据。缺点有多少种登录方式就要调用多少上面的方法。而且要重写登录方法。

    方案2:修改购物车查询接口设计,判断用户登录和cookie存在同时成立。则需要合并。

  • 相关阅读:
    Python random模块下的常用函数小结
    MySQL 数据库连接
    LeetCode 376. 摆动序列 做题小结
    LeetCode 1005. K 次取反后最大化的数组和 做题小结
    LeetCode 455. 分发饼干 做题小结
    完美解决Python与anaconda之间的冲突问题
    LeetCode 122. 买卖股票的最佳时机 II 做题小结
    LeetCode 714. 买卖股票的最佳时机含手续费 做题小结
    如何去除有道云笔记广告(windows)
    baby web
  • 原文地址:https://www.cnblogs.com/whigym/p/10050623.html
Copyright © 2011-2022 走看看