2.5 全选购物车

提示:在购物车页面修改购物车使用局部刷新的效果。

2.5.1. 全选购物车接口设计和定义

1.请求方式

选项 方案
请求方法 PUT
请求地址 /carts/selection/
 #  全选购物车url(r'^carts/selection/$', views.CartsSelectAllView.as_view()),

2.请求参数:JSON

参数名 类型 是否必传 说明
selected bool 是否全选

3.响应结果:JSON

字段 说明
code 状态码
errmsg 错误信息

4.后端接口定义

class CartsSelectAllView(View):"""全选购物车"""def put(self, request):# 接收和校验参数# 判断用户是否登录user = request.userif user.is_authenticated:# 用户已登录,操作redis购物车passelse:# 用户未登录,操作cookie购物车pass

2.5.2. 全选购物车后端逻辑实现

1.接收和校验参数

class CartsSelectAllView(View):"""全选购物车"""def put(self, request):# 接收参数json_dict = json.loads(request.body.decode())selected = json_dict.get('selected', True)# 校验参数if selected:if not isinstance(selected, bool):return http.HttpResponseForbidden('参数selected有误')# 判断用户是否登录user = request.userif user is not None and user.is_authenticated:# 用户已登录,操作redis购物车passelse:# 用户已登录,操作cookie购物车pass

2.全选Redis购物车

class CartsSelectAllView(View):"""全选购物车"""def put(self, request):# 接收和校验参数......# 判断用户是否登录user = request.userif user is not None and user.is_authenticated:# 用户已登录,操作redis购物车redis_conn = get_redis_connection('carts')cart = redis_conn.hgetall('carts_%s' % user.id)sku_id_list = cart.keys()if selected:# 全选redis_conn.sadd('selected_%s' % user.id, *sku_id_list)else:# 取消全选redis_conn.srem('selected_%s' % user.id, *sku_id_list)return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '全选购物车成功'})else:# 用户已登录,操作cookie购物车pass

3.全选cookie购物车

class CartsSelectAllView(View):"""全选购物车"""def put(self, request):# 接收和校验参数......# 判断用户是否登录user = request.userif user is not None and user.is_authenticated:# 用户已登录,操作redis购物车......else:# 用户已登录,操作cookie购物车cart = request.COOKIES.get('carts')response = http.JsonResponse({'code': RETCODE.OK, 'errmsg': '全选购物车成功'})if cart is not None:cart = pickle.loads(base64.b64decode(cart.encode()))for sku_id in cart:cart[sku_id]['selected'] = selectedcookie_cart = base64.b64encode(pickle.dumps(cart)).decode()response.set_cookie('carts', cookie_cart, max_age=constants.CARTS_COOKIE_EXPIRES)return response

2.6 合并购物车

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

提示:

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

2.6.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.6.2. 合并购物车逻辑实现

新建文件:carts.utils.py

from django_redis import get_redis_connection
import pickle
import base64def 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 responsecookie_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()# 清除cookieresponse.delete_cookie('carts')return response

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

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

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

美多商城之购物车(购物车管理3)相关推荐

  1. 注册登录鉴权以及购物车常见管理

    这里写自定义目录标题 注册鉴权以及购物车系统相关知识点 对称加密和非对称加密: **jwt**包含三部分: **登录**分为**授权和鉴权** 注册鉴权以及购物车系统相关知识点 ** 对称加密和非对称 ...

  2. 商城-购物车-购物车功能分析

    商城-购物车-购物车功能分析 2.购物车功能分析 2.1.需求 2.2.流程图 2.购物车功能分析 2.1.需求 需求描述: 用户可以在登录状态下将商品添加到购物车 放入数据库 放入redis(采用) ...

  3. 欢迎来到美多商城!-项目准备之项目介绍-项目需求分析-项目架构设计

    欢迎来到美多商城! [前后端不分离的项目] 项目介绍 项目需求分析 需求分析原因: 可以整体的了解项目的业务流程和主要的业务需求. 项目中,需求驱动开发.即开发人员需要以需求为目标来实现业务逻辑. 需 ...

  4. 【美多商城项目01】了解主要需求和架构设计,创建配置工程

    一.美多商城项目介绍 1.1 项目需求分析 需求分析原因 项目中,需求驱动开发,即开发人员需要以需求为目标来实现业务逻辑. 需求分析方式 企业中,借助产品原型图分析需求. 需求分析完后,前端按照产品原 ...

  5. Django3+Vue美多商城项目的总结

    文章目录 项目说明 主要环境搭建 主要技术实现 django 的配置文件 celery的使用(异步发送短信验证码和邮箱验证链接) 容联云通讯短信平台 QQ登录 jwt实现加密解密验证实现数据的安全性 ...

  6. Django框架之美多商城项目

    后续技术类文档更新到微信公众号-------->>喜欢的扫码关注 美多商城 1. 项目的准备 - 分析商业模式:B2C- 开发流程- 项目的架构- 创建工程- 配置 2. 登录模块 2.1 ...

  7. Python项目实战之欢迎来到美多商城!学习目录导航

    1. 项目准备 1.1. 项目介绍 1.1.1. 项目需求分析 1.1.2. 项目架构设计 1.2. 工程创建和配置 1.2.1. 创建工程 1.2.2. 配置开发环境 1.2.3. 配置Jinja2 ...

  8. 零基础也能快速上手的python实战项目----美多商城

    美多商城:课时安排16天 黑马程序员python企业级开发项目-手把手从0到1开发<美多商城>_哔哩哔哩_bilibili 美多商城属于B2C电商平台,商城销售自营商品给顾客.系统前台包括 ...

  9. java基于ssm开发的美妆商城化妆品电商系统有论文

    简介 Java基于ssm(可以转springboot项目哦)开发的美妆商城系统,主要是卖化妆品的系统,用户可以浏览商品,加入购物车,下单,在个人中心管理自己的订单.管理员可以管理自己的商品,发布商品, ...

  10. python美多商城项目百度网盘_美多商城项目(七)

    正文共: 7620字 4图 预计阅读时间: 20分钟 每日分享 If you can change your mind, you can change your life. 如果你愿意改变你的想法,你 ...

最新文章

  1. bestcoder #71 1003 找位运算的最大生成树
  2. 腾讯-视频打标签算法探讨
  3. 《Cracking the Coding Interview》——第6章:智力题——题目4
  4. IIC软件模拟-读写EEPROM
  5. [vscode] c++ debugging
  6. 解读BOLT引擎例子——HelloBolt2
  7. cmpp20协议对接
  8. Windows 电源计划设置关闭显示器不起作用的解决方法
  9. 【手把手带你Godot游戏开发】FlappyBird:1.Hello World
  10. python冒号排序教程
  11. 分布式服务发现与注册中心 Consul 中文入门指南
  12. 如何用Vue开发前端和网站
  13. PHP与MySQL外文文献译文和原文_计算机外文翻译---基于PHP和MYSQL的网站设计和实现...
  14. python基础教程:易忽视知识点小结
  15. StarGAN-多领域图像翻译
  16. Ecotourism--生态旅游
  17. eclipse中设置字体大小
  18. 2.9 Nginx一致性HASH算法
  19. 来测试下 2019 你一共写了多少行代码?
  20. AutoCAD_C#Net大比例尺地形图自动分幅

热门文章

  1. 构筑超异构计算时代,英特尔 AI 全布局
  2. 转型AI成功几率有几分?太真实了......
  3. 10个工程师,9个不合格!
  4. Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream
  5. AI如何赋能金融行业?百度、图灵深视等同台分享技术实践
  6. 适合小团队作战,奖金+招聘绿色通道,这一届算法大赛关注下?
  7. 从Storm到Flink:大数据处理的开源系统及编程模型(文末福利)
  8. 奇点云发布三大无人零售终端产品,“云”“端”结合赋能零售商
  9. 利用RNN训练Seq2Seq已经成为过去,CNN才是未来?
  10. 如何优雅地拿到30k月薪的offer?这几个大咖就是来帮你搞定薪水和面试官的