文章目录

  • 订单结算页面
  • 重点:提交订单
    • 创建订单数据表
      • 注意事项:
      • 订单表介绍
      • 提交订单数据:
    • 保存订单中的数据处理操作(业务逻辑复杂,代码不难,前面都写过)
      • 首先是数据验证和加载
      • 接着是具体得 业务处理
        • 构建订单对象时,我们通过 当前时间,创建一个 订单号。
        • 下面是业务处理代码,我们需要使用到mysql事务
          • 首先说下django自动提交
          • 调用原始的方法,手动管理事务

订单结算页面

  • 位置:在购物车中选择好商品之后,就 可以点击 去结算按钮,进入到这个结算页面

  • 这里最关键的一点是:

    • 涉及到金钱的交易,要保证数据的准确性!
    • 我们不能相信前端 传递过来的 商品价格信息,而是应该自己根据redis当中勾选的商品id,进行计算价格。
  • 其他的并没有什么好说的,前端需要的数据从后端传递过去即可

    • (1)用户地址信息
    • (2)支付方式选择
      • 支付方式,我们 直接选择是0,1就可以代表那种支付方式了,方法很多
    • (3)商品信息
    • (4)运费:这是一个复杂的地方(但是我们没有运费系统,所以不管买啥都是,运费都是默认十元

重点:提交订单

创建订单数据表

注意事项:

  • (1)订单号不再采用数据库自增主键,而是由后端生成。
  • (2)一个订单中可以有多个商品信息,订单基本信息和订单商品信息是一对多的关系

订单表介绍

  • 一般都是订单完成之后才有的商品评论,这里很符合实际

提交订单数据:

  • 只需要(1)订单地址
  • (2)支付方式
  • 其余的均可以自己通过后端获取。 比如总价格,购买哪些商品,都可以从数据表,或者是redis当中得到。
  • 点击提交订单时面就是这个地址,看到我们只传递了两个数据。

保存订单中的数据处理操作(业务逻辑复杂,代码不难,前面都写过)

  • (1) 创建订单基本信息对象
  • (2) 查询选中的购物车数据
  • (3) 查询sku商品对象
    • 3.1 判断商品库存,不足则提示
    • 3.2 库存足够继续执行
    • 3.3 修改商品的库存,销量
    • 3.4 创建订单商品表对象
  • (4) 删除购物车种选中的商品数据

首先是数据验证和加载

     # 接收dict1 = json.loads(request.body.decode())address_id = dict1.get('address_id')pay_method = dict1.get('pay_method')pay_method = int(pay_method)# 验证if not all([address_id, pay_method]):return http.JsonResponse({'code': RETCODE.PARAMERR, 'errmsg': '参数不完整'})# 收货地址try:address = Address.objects.get(pk=address_id, is_delete=False, user_id=request.user.id)except:return http.JsonResponse({'code': RETCODE.PARAMERR, 'errmsg': '收货地址无效'})# 支付方式if pay_method not in [1, 2]:return http.JsonResponse({'code': RETCODE.PARAMERR, 'errmsg': '支付方式无效'})# 处理(业务最多)user = request.usernow = datetime.now()# 1.查询购物车选中的商品redis_cli = get_redis_connection('cart')# 下面是从redis中拿出商品数据# 从hash中读取商品编号、数量cart_dict_bytes = redis_cli.hgetall('cart%d' % request.user.id)cart_dict_int = {int(sku_id): int(count) for sku_id, count in cart_dict_bytes.items()}# 从set中读取选中的商品编号cart_selected_bytes = redis_cli.smembers('selected%d' % request.user.id)cart_selected_int = [int(sku_id) for sku_id in cart_selected_bytes]

接着是具体得 业务处理

构建订单对象时,我们通过 当前时间,创建一个 订单号。

  • 另外还是格式化字符串的函数以及参数,strftime

下面是业务处理代码,我们需要使用到mysql事务

  • 因为商品库存等的判断,以及订单对象的创建,必须是同时成功,同时失败的。我们需要使用事务。
  • 明确: django本身不提供事务功能! 必须是使用的数据库具有事务功能。 本身上django提供的事务管理函数,还是调用数据库底层的接口方法。
  • django中关于mysql事务的文档
首先说下django自动提交


这就是我们不需要自己手动commit提交数据,django会帮我们管理。

调用原始的方法,手动管理事务

  • 开启事务,我们需要使用:

    后面这里的逻辑还要涉及 悲观锁乐观锁, 事务隔离级别。先到这里,后续接着讲。

完整电商项目--(八)商品订单模块(1):订单结算与 mysql事务相关推荐

  1. Vue3电商项目实战-商品详情模块6【17-商品详情-标签页组件、18-商品详情-热榜组件、19-商品详情-详情组件、20-商品详情-注意事项组件】

    文章目录 17-商品详情-标签页组件 18-商品详情-热榜组件 19-商品详情-详情组件 20-商品详情-注意事项组件 17-商品详情-标签页组件 目的:实现商品详情组件和商品评价组件的切换 大致步骤 ...

  2. Spring Boot电商项目17:用户模块六:注册接口开发之:使用【GlobalExceptionHandler】来全局统一处理异常;(涉及了@ControllerAdvice等注解)

    说明: (1)为什么写这篇博客?:在[Spring Boot电商项目15:用户模块四:注册接口开发:]中,在Service层中遇到了[用户名重复]的情况,然后Service层把这个情况做成了一个异常, ...

  3. java电商项目搭建-------商品详情页模块

    努力好了,时间会给你答案.--------magic_guo 在一个电商项目中,访问频率最高的是商品详情页页面,而且商品详情页的变化评率不会太高(除非是搞活动的时候):那么访问频率高,然后再使用数据库 ...

  4. 完整电商项目--项目介绍(1)

    文章目录 项目开发模式 项目介绍 归纳项目的主要模块 技术点 总结: 本项目不仅是对 电商项目的开发学习,也是对上面所提到的技术的 深入理解和教学!可能会跳出项目本身去讲解 相关技术点的内容,总体来说 ...

  5. java spu sku_SpringBoot电商项目实战 — 商品的SPU/SKU实现

    最近事情有点多,所以系列文章已停止好多天了.今天我们继续Springboot电商项目实战系列文章.到目前为止,整个项目的架构和基础服务已经全部实现,分布式锁也已经讲过了.那么,现在应该到数据库设计及代 ...

  6. [Vue.js]实战 -- 电商项目(八)

    数据统计 数据统计概述 用于统计电商平台运营过程的中的各种统计数据 通过直观的可视化方式展示出来,方便相关运营和管理人员查看 用户来源数据统计报表 Echarts 第三方可视化库的基本使用 安装ech ...

  7. Vue3电商项目实战-个人中心模块6【14-订单管理-查看物流、15-订单详情-头部展示】

    文章目录 14-订单管理-查看物流 15-订单详情-头部展示 14-订单管理-查看物流 目的:再订单列表,订单待收货,查询物流信息. 大致步骤: 定义查询物流的API函数 定义一个查看物流组件 在 o ...

  8. 完整电商项目--(五)用户基本信息(2):收货地址

    业务分析(纯业务逻辑分析,增删改查我们就不讲代码实现,主要是学习电商设计) 这一部分可以参考一般的电商网站做 class Address(BaseModel):"""用户 ...

  9. 电商项目day11(商品搜索功能实现排序结果分页)

    今日目标: 完成关键字搜索功能     能够实现高亮显示效果     完成查询分类列表的功能     完成条件过滤构建功能     完成分页动态页码展示 一.完成关键字搜索 1.首先构建工程    p ...

最新文章

  1. ggplot2 调整绘图区域大小
  2. 小技巧 | 使用 mv 重命名文件无需两次键入文件名称
  3. 如何在 CentOS 7 上安装 Nginx
  4. 程序包com.sun.image.codec.jpeg.JPEGCo不存在解决办法
  5. indexedDB数据库的使用
  6. haproxy的acl与或非关系
  7. date比较大小 mybatis_MyBatis Sqlserver日期比较
  8. 营救(洛谷-P1396)
  9. python预测药_python 最麻烦的时间有药了
  10. 雷军:电视机越大才越舒服!
  11. Beta冲刺随笔汇总
  12. 计算机专业基础 -- 网络相关AJAX基础知识
  13. 关于百度富文本编辑器UEditor中ctrl+enter键发送消息的解决方案
  14. 《Web安全攻防》学习笔记
  15. 创立达摩院,马云是想当武林盟主吗?
  16. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)
  17. 用三种方式安装Nginx
  18. Leetcode_206_Reverse Linked List
  19. 决策树后剪枝算法(四)最小错误剪枝MEP
  20. Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition 人脸聚类

热门文章

  1. Auto CAD2004完全笔记
  2. 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想
  3. 无法计算机您系统的体验指数,win7无法计算机您系统的windows体验指数如何解决...
  4. 斯坦福自然语言处理(1)——三元组的使用
  5. 抄底利器!如何用Python量化 识别股票双底形态走势!
  6. 计算机中操作系统的主要功能是什么,计算机中的操作系统的主要功能是什么
  7. 发布 PAIRED:一种生成对抗环境的全新多智能体方法
  8. C++后端开发学习路线及推荐学习时间
  9. webpackjsonp 还原_EST:微生物介导下砷还原及其在铁氧化物上吸附/解吸耦合反应动力学模型...
  10. 春夏季更替 超健康养生的饮食搭配标准