当前位置: 首页 > news >正文

18.4 查看订单

分析

  1. 查看订单的本质是查询并在页面展示订单数据,根据之前提交订单的设计可知,订单涉及到基本订单信息和商品订单信息两个部分,所以需要从两张表查询数据。
  2. 因是查询,所以采用get方法,将查询到的数据展示在user_center_order.html模板。
  3. 订单属于用户数据,所以在users应用中的views.py中定义视图类UserOrderInfoView,继承LoginRequiredMixin,保证登录状态,并在其get方法中实现查看功能。

实现

users应用中的views.py中定义视图类UserOrderInfoView

class UserOrderInfoView(LoginRequiredMixin, View):def get(self, request, page_num):"""提供我的订单页面"""user = request.user# 通过用户对象反向查询订单信息,[关联模型小写]_set是 Django 默认的反向关系管理器名称orders = user.orderinfo_set.all().order_by('-create_time')for order in orders:# 绑定订单状态order.status_name = OrderInfo.ORDER_STATUS_CHOICES[order.status - 1][1]# 绑定支付状态order.pay_method_name = OrderInfo.PAY_METHOD_CHOICES[order.pay_method - 1][1]order.sku_list = []# 正向查询订单商品order_goods = order.skus.all()for order_good in order_goods:sku = order_good.skusku.count = order_good.countsku.amount = sku.price * sku.countorder.sku_list.append(sku)# 分页处理page_num = int(page_num)try:paginator = Paginator(orders, constants.ORDERS_LIST_LIMIT)page_orders = paginator.page(page_num)total_page = paginator.num_pagesexcept EmptyPage as e:return HttpResponseNotFound('订单不存在')context = {'page_orders': page_orders,'total_page': total_page,'page_num': page_num,}return render(request, 'user_center_order.html', context)

在users应用的urls.py中增加路由

path('orders/info/<int:page_num>/', views.UserOrderInfoView.as_view(), name='myorderinfo'),

user_center_order.html

{#<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">#}
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>小鱼商城-全部订单</title><link rel="stylesheet" type="text/css" href="{{ static('css/jquery.pagination.css') }}"><link rel="stylesheet" type="text/css" href="{{ static('css/reset.css') }}"><link rel="stylesheet" type="text/css" href="{{ static('css/main.css') }}"><script type="text/javascript" src="{{ static('js/jquery-1.12.4.min.js') }}"></script><script type="text/javascript" src="{{ static('js/vue-2.5.16.js') }}"></script><script type="text/javascript" src="{{ static('js/axios-0.18.0.min.js') }}"></script>
</head>
<body>
<div id="app"><div class="header_con"><div class="header" v-cloak><div class="welcome fl">欢迎来到小鱼商城!</div><div class="fr"><div v-if="username" class="login_btn fl">欢迎您:<em>[[ username ]]</em><span>|</span><a href="{{ url('users:logout') }}">退出</a></div><div v-else class="login_btn fl"><a href="{{ url('users:login') }}">登录</a><span>|</span><a href="{{ url('users:register') }}">注册</a><a href="{{ url('users:register') }}">注册</a></div><div class="user_link fl"><span>|</span><a href="{{ url('users:info') }}">用户中心</a><span>|</span><a href="{{ url('carts:info') }}">我的购物车</a><span>|</span><a href="{{ url('users:myorderinfo',args=(1,)) }}">我的订单</a></div></div></div></div><div class="search_bar clearfix"><a href="{{ url('contents:index') }}" class="logo fl"><img src="{{ static('images/logo.png') }}"></a><div class="search_wrap fl"><form method="get" action="/search/" class="search_con"><input type="text" class="input_text fl" name="q" placeholder="搜索商品"><input type="submit" class="input_btn fr" name="" value="搜索"></form><ul class="search_suggest fl"><li><a href="#">索尼微单</a></li><li><a href="#">优惠15元</a></li><li><a href="#">美妆个护</a></li><li><a href="#">买2免1</a></li></ul></div></div><div class="main_con clearfix"><div class="left_menu_con clearfix"><h3>用户中心</h3><ul><li><a href="{{ url('users:info') }}">· 个人信息</a></li><li><a href="{{ url('users:address') }}">· 收货地址</a></li><li><a href="{{ url('users:myorderinfo',args=(1,)) }}" class="active">· 全部订单</a></li><li><a href="{{ url('users:resetpwd') }}">· 修改密码</a></li></ul></div><div class="right_content clearfix"><h3 class="common_title2">全部订单</h3>{% for order in page_orders %}<ul class="order_list_th w978 clearfix"><li class="col01">{{ order.create_time.strftime('%Y-%m-%d %H:%M:%S') }}</li><li class="col02">订单号:{{ order.order_id }}</li></ul><table class="order_list_table w980"><tbody><tr><td width="55%">{% for sku in order.sku_list %}<ul class="order_goods_list clearfix"><li class="col01"><img src="/static/images/goods/{{ sku.default_image.url }}.jpg"></li><li class="col02"><span>{{ sku.name }}</span></li><li class="col03">{{ sku.count }}</li><li class="col04">{{ sku.amount }}元</li></ul>{% endfor %}</td><td width="15%">{{ order.total_amount }}元<br>含运费:{{ order.freight }}元</td><td width="15%">{{ order.pay_method_name }}</td><td width="15%"><a @click="oper_btn_click('{{ order.order_id }}', {{ order.status }})" class="oper_btn">{{order.status_name }}</a></td></tr></tbody></table>{% endfor %}<div class="pagenation"><div id="pagination" class="page"></div></div></div></div><div class="footer"><div class="foot_link"><a href="#">关于我们</a><span>|</span><a href="#">联系我们</a><span>|</span><a href="#">招聘人才</a><span>|</span><a href="#">友情链接</a></div><p>CopyRight © 2024 北京小鱼商业股份有限公司 All Rights Reserved</p><p>电话:010-****888 京ICP备*******8号</p></div>
</div>
<script type="text/javascript" src="{{ static('js/common.js') }}"></script>
<script type="text/javascript" src="{{ static('js/user_center_order.js') }}"></script>
<script type="text/javascript" src="{{ static('js/jquery.pagination.min.js') }}"></script>
<script type="text/javascript">$(function () {$('#pagination').pagination({currentPage: {{ page_num }},totalPage: {{ total_page }},callback: function (current) {{#location.href = '/orders/info/1/';#}location.href = '/orders/info/' + current + '/';}})});
</script>
</body>
</html>

最后,将其它模板中注释掉的查看订单的语句释放掉,即可看到查询订单的效果。


文章转载自:

http://DIM1eM3d.Ljcky.cn
http://ciSpnqrJ.Ljcky.cn
http://X8u88vZW.Ljcky.cn
http://evc8SVdX.Ljcky.cn
http://2sOSLKaq.Ljcky.cn
http://TekRuTXB.Ljcky.cn
http://CRiEZKOU.Ljcky.cn
http://pvXxOIMj.Ljcky.cn
http://0tHLrSzJ.Ljcky.cn
http://cXQATRz3.Ljcky.cn
http://0ZgyLtcW.Ljcky.cn
http://tjWPN4Gj.Ljcky.cn
http://iGHEdoBs.Ljcky.cn
http://3YcxDbm6.Ljcky.cn
http://ctZFFB0F.Ljcky.cn
http://fNyKK8vH.Ljcky.cn
http://Hun9amv2.Ljcky.cn
http://F0ca5mId.Ljcky.cn
http://kLLGX1n3.Ljcky.cn
http://Gdb2koOf.Ljcky.cn
http://Aty4H84N.Ljcky.cn
http://Pcxv2d56.Ljcky.cn
http://TZxAiICH.Ljcky.cn
http://Yb3hD0Uh.Ljcky.cn
http://pXqiguCH.Ljcky.cn
http://JMzXlVgc.Ljcky.cn
http://z7WSi8vo.Ljcky.cn
http://mORRzAGT.Ljcky.cn
http://DR0zg8JL.Ljcky.cn
http://hSC6UVEy.Ljcky.cn
http://www.dtcms.com/a/371601.html

相关文章:

  • 【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
  • 九.弗洛伊德(Floyd)算法
  • pytorch非线性回归
  • Java 大视界 -- Java 大数据机器学习模型在金融市场风险评估与投资组合优化中的应用(407)
  • Python快速入门专业版(十一):布尔值与None:Python中的“真假”与“空值”(附逻辑判断案例)
  • 鸿蒙NEXT应用数据持久化全面解析:从用户首选项到分布式数据库
  • Linux笔记---封装套接字
  • 轻松Linux-8.动静态库的制作及原理
  • LeetCode 面试经典 150 题:移除元素(双指针思想优化解法详解)
  • 【TypeScript】闭包
  • 后端(fastAPI)学习笔记(CLASS 1):扩展基础
  • Spring Boot @RestController 注解详解
  • 腾讯云语音接口实现会议系统
  • ESP32与SUI-101A实现用电器识别
  • Wan2.2-S2V - 音频驱动图像生成电影级质量的数字人视频 ComfyUI工作流 支持50系显卡 一键整合包下载
  • 开始 ComfyUI 的 AI 绘图之旅-图生图(二)
  • VS2017安装Qt插件
  • ZYNQ FLASH读写
  • 容器元素的滚动条回到顶部
  • 【音频字幕】构建一个离线视频字幕生成系统:使用 WhisperX 和 Faster-Whisper 的 Python 实现
  • ncnn-Android-mediapipe_hand 踩坑部署实录
  • java面试中经常会问到的mysql问题有哪些(基础版)
  • SoundSource for Mac 音频控制工具
  • Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
  • 第11篇:降维算法:PCA、t-SNE、UMAP
  • 【Leetcode100】算法模板之二叉树
  • 深入理解假设检验:从抛硬币到药物实验的全景讲解
  • JavaScript笔记之JS 和 HTML5 的关系
  • 第4篇 conda install pytorch==2.0.0报错
  • 基于Echarts+HTML5可视化数据大屏展示-学生综合成绩评价系统大屏