美多商城之购物车(购物车管理2)
2.3 修改购物车
提示:在购物车页面修改购物车使用局部刷新的效果。
2.3.1. 修改购物车接口设计和定义
1.请求方式
选项 | 方案 |
---|---|
请求方法 | PUT |
请求地址 | /carts/ |
2.请求参数:JSON
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
sku_id | int | 是 | 商品SKU编号 |
count | int | 是 | 商品数量 |
selected | bool | 否 | 是否勾选 |
3.响应结果:JSON
字段 | 说明 |
---|---|
sku_id | 商品SKU编号 |
count | 商品数量 |
selected | 是否勾选 |
4.后端接口定义
class CartsView(View):"""购物车管理"""def put(self, request):"""修改购物车"""# 接收和校验参数# 判断用户是否登录user = request.userif user.is_authenticated:# 用户已登录,修改redis购物车passelse:# 用户未登录,修改cookie购物车pass
2.3.2. 修改购物车后端逻辑实现
1.接收和校验参数
class CartsView(View):"""购物车管理"""def put(self, request):"""修改购物车"""# 接收参数json_dict = json.loads(request.body.decode())sku_id = json_dict.get('sku_id')count = json_dict.get('count')selected = json_dict.get('selected', True)# 判断参数是否齐全if not all([sku_id, count]):return http.HttpResponseForbidden('缺少必传参数')# 判断sku_id是否存在try:sku = models.SKU.objects.get(id=sku_id)except models.SKU.DoesNotExist:return http.HttpResponseForbidden('商品sku_id不存在')# 判断count是否为数字try:count = int(count)except Exception:return http.HttpResponseForbidden('参数count有误')# 判断selected是否为bool值if selected:if not isinstance(selected, bool):return http.HttpResponseForbidden('参数selected有误')# 判断用户是否登录user = request.userif user.is_authenticated:# 用户已登录,修改redis购物车passelse:# 用户未登录,修改cookie购物车pass
2.修改Redis购物车
class CartsView(View):"""购物车管理"""def put(self, request):"""修改购物车"""# 接收和校验参数......# 判断用户是否登录user = request.userif user.is_authenticated:# 用户已登录,修改redis购物车redis_conn = get_redis_connection('carts')pl = redis_conn.pipeline()# 因为接口设计为幂等的,直接覆盖pl.hset('carts_%s' % user.id, sku_id, count)# 是否选中if selected:pl.sadd('selected_%s' % user.id, sku_id)else:pl.srem('selected_%s' % user.id, sku_id)pl.execute()# 创建响应对象cart_sku = {'id':sku_id,'count':count,'selected':selected,'name': sku.name,'default_image_url': sku.default_image.url,'price': sku.price,'amount': sku.price * count,}return http.JsonResponse({'code':RETCODE.OK, 'errmsg':'修改购物车成功', 'cart_sku':cart_sku})else:# 用户未登录,修改cookie购物车pass
3.修改cookie购物车
class CartsView(View):"""购物车管理"""def put(self, request):"""修改购物车"""# 接收和校验参数......# 判断用户是否登录user = request.userif user.is_authenticated:# 用户已登录,修改redis购物车......else:# 用户未登录,修改cookie购物车cart_str = request.COOKIES.get('carts')if cart_str:# 将cart_str转成bytes,再将bytes转成base64的bytes,最后将bytes转字典cart_dict = pickle.loads(base64.b64decode(cart_str.encode()))else:cart_dict = {}# 因为接口设计为幂等的,直接覆盖cart_dict[sku_id] = {'count': count,'selected': selected}# 将字典转成bytes,再将bytes转成base64的bytes,最后将bytes转字符串cookie_cart_str = base64.b64encode(pickle.dumps(cart_dict)).decode()# 创建响应对象cart_sku = {'id': sku_id,'count': count,'selected': selected,'name': sku.name,'default_image_url': sku.default_image.url,'price': sku.price,'amount': sku.price * count,}response = http.JsonResponse({'code':RETCODE.OK, 'errmsg':'修改购物车成功', 'cart_sku':cart_sku})# 响应结果并将购物车数据写入到cookieresponse.set_cookie('carts', cookie_cart_str, max_age=constants.CARTS_COOKIE_EXPIRES)return response
2.4 删除购物车
提示:在购物车页面删除购物车使用局部刷新的效果。
2.4.1. 删除购物车接口设计和定义
1.请求方式
选项 | 方案 |
---|---|
请求方法 | DELETE |
请求地址 | /carts/ |
2.请求参数:JSON
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
sku_id | int | 是 | 商品SKU编号 |
3.响应结果:JSON
字段 | 说明 |
---|---|
code | 状态码 |
errmsg | 错误信息 |
4.后端接口定义
class CartsView(View):"""购物车管理"""def delete(self, request):"""删除购物车"""# 接收和校验参数# 判断用户是否登录user = request.userif user.is_authenticated:# 用户已登录,删除redis购物车passelse:# 用户未登录,删除cookie购物车pass
2.4.2. 删除购物车后端逻辑实现
1.接收和校验参数
class CartsView(View):"""购物车管理"""def delete(self, request):"""删除购物车"""# 接收参数json_dict = json.loads(request.body.decode())sku_id = json_dict.get('sku_id')# 判断sku_id是否存在try:models.SKU.objects.get(id=sku_id)except models.SKU.DoesNotExist:return http.HttpResponseForbidden('商品不存在')# 判断用户是否登录user = request.userif user is not None and user.is_authenticated:# 用户已经登录,删除redis购物车passelse:# 用户未登录,删除cookie购物车pass
2.删除Redis购物车
class CartsView(View):"""购物车管理"""def delete(self, request):"""删除购物车"""# 接收和校验参数......# 判断用户是否登录user = request.userif user is not None and user.is_authenticated:# 用户登录,删除redis购物车redis_conn = get_redis_connection('carts')pl = redis_conn.pipeline()# 删除键,就等价于删除了整条记录pl.hdel('carts_%s' % user.id, sku_id)pl.srem('selected_%s' % user.id, sku_id)pl.execute()# 删除结束后,没有响应的数据,只需要响应状态码即可return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '删除购物车成功'})else:# 用户未登录,删除cookie购物车pass
3.删除cookie购物车
class CartsView(View):"""购物车管理"""def delete(self, request):"""删除购物车"""# 接收和校验参数......# 判断用户是否登录user = request.userif user is not None and user.is_authenticated:# 用户未登录,删除redis购物车......else:# 用户未登录,删除cookie购物车cart_str = request.COOKIES.get('carts')if cart_str:# 将cart_str转成bytes,再将bytes转成base64的bytes,最后将bytes转字典cart_dict = pickle.loads(base64.b64decode(cart_str.encode()))else:cart_dict = {}# 创建响应对象response = http.JsonResponse({'code': RETCODE.OK, 'errmsg': '删除购物车成功'})if sku_id in cart_dict:del cart_dict[sku_id]# 将字典转成bytes,再将bytes转成base64的bytes,最后将bytes转字符串cookie_cart_str = base64.b64encode(pickle.dumps(cart_dict)).decode()# 响应结果并将购物车数据写入到cookieresponse.set_cookie('carts', cookie_cart_str, max_age=constants.CARTS_COOKIE_EXPIRES)return response
美多商城之购物车(购物车管理2)相关推荐
- 注册登录鉴权以及购物车常见管理
这里写自定义目录标题 注册鉴权以及购物车系统相关知识点 对称加密和非对称加密: **jwt**包含三部分: **登录**分为**授权和鉴权** 注册鉴权以及购物车系统相关知识点 ** 对称加密和非对称 ...
- 商城-购物车-购物车功能分析
商城-购物车-购物车功能分析 2.购物车功能分析 2.1.需求 2.2.流程图 2.购物车功能分析 2.1.需求 需求描述: 用户可以在登录状态下将商品添加到购物车 放入数据库 放入redis(采用) ...
- 欢迎来到美多商城!-项目准备之项目介绍-项目需求分析-项目架构设计
欢迎来到美多商城! [前后端不分离的项目] 项目介绍 项目需求分析 需求分析原因: 可以整体的了解项目的业务流程和主要的业务需求. 项目中,需求驱动开发.即开发人员需要以需求为目标来实现业务逻辑. 需 ...
- 【美多商城项目01】了解主要需求和架构设计,创建配置工程
一.美多商城项目介绍 1.1 项目需求分析 需求分析原因 项目中,需求驱动开发,即开发人员需要以需求为目标来实现业务逻辑. 需求分析方式 企业中,借助产品原型图分析需求. 需求分析完后,前端按照产品原 ...
- Django3+Vue美多商城项目的总结
文章目录 项目说明 主要环境搭建 主要技术实现 django 的配置文件 celery的使用(异步发送短信验证码和邮箱验证链接) 容联云通讯短信平台 QQ登录 jwt实现加密解密验证实现数据的安全性 ...
- Django框架之美多商城项目
后续技术类文档更新到微信公众号-------->>喜欢的扫码关注 美多商城 1. 项目的准备 - 分析商业模式:B2C- 开发流程- 项目的架构- 创建工程- 配置 2. 登录模块 2.1 ...
- Python项目实战之欢迎来到美多商城!学习目录导航
1. 项目准备 1.1. 项目介绍 1.1.1. 项目需求分析 1.1.2. 项目架构设计 1.2. 工程创建和配置 1.2.1. 创建工程 1.2.2. 配置开发环境 1.2.3. 配置Jinja2 ...
- 零基础也能快速上手的python实战项目----美多商城
美多商城:课时安排16天 黑马程序员python企业级开发项目-手把手从0到1开发<美多商城>_哔哩哔哩_bilibili 美多商城属于B2C电商平台,商城销售自营商品给顾客.系统前台包括 ...
- java基于ssm开发的美妆商城化妆品电商系统有论文
简介 Java基于ssm(可以转springboot项目哦)开发的美妆商城系统,主要是卖化妆品的系统,用户可以浏览商品,加入购物车,下单,在个人中心管理自己的订单.管理员可以管理自己的商品,发布商品, ...
- python美多商城项目百度网盘_美多商城项目(七)
正文共: 7620字 4图 预计阅读时间: 20分钟 每日分享 If you can change your mind, you can change your life. 如果你愿意改变你的想法,你 ...
最新文章
- mysql可以关联视图_Mysql 五: 数据库自关联、视图
- python慢在哪里_求大神分析一下我的python脚本慢在哪里?
- Java实现Huffman哈夫曼树(数组实现)
- 云计算架构设计6大原则,你遵循了吗?| 赠书
- docker build -t_在Docker环境构建、打包和运行Spring Boot应用
- 暴力推荐2:硬盘分区丢失之DiskGenius
- python怎样压缩和解压缩ZIP文件
- Project 3 resources reassigned !!!
- Pyqt Model/view框架 3.可编辑项
- ibook软件java_Ibookv1.11 塞班版下载 - 手机阅读 - 非凡手机软件
- 网络打印机怎么扫描到计算机,怎么用打印机扫描文件-富士施乐SC2020复印机设置网络扫描到计算机(SMB)...
- 图灵大会 | 新观点:AI盛世,其实我们离得还很远
- SAR图像:拟合杂波时常用的分布
- 离线安装openOffice
- 初始C语言——成绩等级划分
- 快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)
- es6 符号 双问号
- Redis学习笔记(四):配置文件详细说明(redis-3.2)
- iOS开源库–最全的整理
- Go调用Python by go-python3
热门文章
- 程序员千万不要选全栈开发
- 华为腾讯百度众安微众360大咖齐聚,2019中国区块链开发者大会首批议程曝光!...
- 不甘心只做输入工具,搜狗输入法上线AI助手,提供智能服务
- 单v100 GPU,4小时搜索到一个鲁棒的网络结构
- AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
- 如何像用MNIST一样来用ImageNet?这里有一份加速TensorFlow分布式训练的梯度压缩指南
- 跟风Google Brain,Facebook AI研究机构启动见习项目
- 谷歌无人车之父刚推出的“无人驾驶入门”课,到底能学到啥?
- 接口优化:Redis预减库存,减少对数据库访问方案
- SQL查找是否存在,别再count了!