首页
学习
活动
专区
圈层
工具
发布

基于Django的电子商务网站开发(连载34)

新年加入啄木鸟公众号,好运滚滚來!

顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,

主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

3.7.2查看所有订单

1.urls.py

...url(r'^view_all_order/$', views.view_all_order),...

2.views.py

...# 查看所有订单def view_all_order(request): util = Util() username = util.check_user(request) if username=="": uf = LoginForm() return render(request,"index.html",{'uf':uf,"error":"请登录后再进入"}) else: #获得所有总订单信息 orders_all = Orders.objects.all() #初始化列表,给模板 Reust_Order_list = [] #遍历总订单 for key1 in orders_all: #通过当前订单id获取这个订单的单个订单详细信息 order_all = Order.objects.filter(order_id=key1.id) #检查这个订单是不是属于当前用户的 user = get_object_or_404(User,id=order_all[0].user_id) #如果属于将其放入总订单列表中 if user.username == username: #初始化总订单列表 Orders_object_list = [] #初始化总订单类 orders_object = Orders_list #产生一个Orders_lis对象 orders_object = util.set_orders_list(key1) #初始化总价钱为0 prices=0 #遍历这个订单 for key in order_all: #初始化订单类 order_object = Order_list #产生一个Order_lis对象 order_object =util.set_order_list(key) #将产生的order_object类加入到总订单列表中 Orders_object_list.append(order_object) #计算总价格 prices = order_object.price * key.count + prices #把总价格放入到order_object类中 order_object.set_prices(prices) #把当前记录加到Reust_Order_list列中 #从这里可以看出,Reust_Order_list每一项是一个字典类型,key为总订单类orders_object,value为总订单列表Orders_object_list #总订单列表Orders_object_list中每一项为一个单独订单对象order_object,即Reust_Order_list=[{orders_object类:[order_object类,...]},...] Reust_Order_list.append({orders_object:Orders_object_list}) return render(request, 'view_all_order.html', {"user": username,'Orders_set': Reust_Order_list})...

(1)登录用户通过语句orders_all= Orders.objects.all()获得数据库中所有的总订单。

(2)通过循环语句forkey1 in orders_all遍历总订单,在循环体内通过语句order_all = Order.objects.filter(order_id=key1.id)获得当前总订单下的所有单个订单。

(3)通过语句user =get_object_or_404(User,id=order_all[0].user_id)获得单个订单的用户信息,由判断语句ifuser.username == username判断这个订单是否属于当前登录用户,只有属于当前登录用户的订单信息才可以被显示出来。

(4)通过orders_object= Orders_list初始化一个总订单类对象。

(5)通过语句orders_object= util.set_orders_list(key1)调用Util类中set_orders_list()方法获得总订单类对象。

(6)通过语句prices=0初始化总价钱为0,由循环语句for keyin order_all遍历当前总订单下的所有单个订单。

(7)在循环体内由语句order_object= Order_list和order_object =util.set_order_list(key)初始化并且获得单个订单order_object类对象。

(8)再由语句Orders_object_list.append(order_object)把单个订单类order_object对象加入到Orders_object_list列表变量中去,这里的Orders_object_list列表变量是在第一个循环后和第二个循环前被初始化的。

(9)通过语句prices =order_object.price * key.count + prices累积计算这个总订单内商品的总价钱,第二个循环结束,继续第一个循环。

(10)通过语句order_object.set_prices(prices)把总价钱加入到order_object类中。

(11)把orders_object和Orders_object_list以值参对的形式加入到Reust_Order_list列表变量中。

(12)通过语句Reust_Order_list.append({orders_object:Orders_object_list})把参数{orders_object:Orders_object_list}加入到列表变量Reust_Order_list后面,这里的列表变量Reust_Order_list是在第一个循环前初始化。

(13)最后调用view_all_order.html模板。

这里调用模板的变量Reust_Order_list是一个比较复杂的数据结构,首先它是一个列,每一个类中包含一个字典类型,这个字典类型的参数为总订单类orders_object,值为总订单列表Orders_object_list。总订单列表Orders_object_list中每一项为一个单独订单对象order_object。可以标记为Reust_Order_list=[{orders_object类:[order_object类,...]},...]

set_orders_list()方法在goods/util.py中创建。

...def set_orders_list(self,key): order_list = Orders_list() order_list.set_id(key.id)#主键 order_list.set_address(key.address)#地址信息 order_list.set_create_time(key.create_time)#创建时间 return order_list...

方法返回Orders_list对象,Orders_list对象在object.py中定义。

...#总订单模型class Orders_list(): #总订单id def set_id(self,id): self.id=id #总订单收货地址 def set_address(self,address): self.address=address #总订单建立时间 def set_create_time(self,create_time): self.create_time=create_time...

3.模板

view_all_order.html

{% extends "base.html" %}{% block content %} </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="/user_info/">{{user}}</a></li> <li><a href="/logout/">退出</a></li> </ul> </div><!--/.nav-collapse --> </div> </nav> <div class="container theme-showcase" role="main"> <div> <div id="navbar" class="navbar-collapse collapse"> </div><!--/.navbar-collapse --> </div> {% for key1 in Orders_set %} <div> <div> <table class="table table-striped"> <thead> <tr> <th>编号</th> <th>商品名称</th> <th>商品价钱</th> <th>个数</th> <th>删除</th> </tr> </thead> <tbody> {% for key2,value in key1.items %} {% for key in value %} <tr> <td><a href="/view_goods/{{key.good_id}}/">{{ key.id }}</a></td> <td>{{ key.name }}</td> <td>¥{{ key.price }}</td> <td>{{ key.count }}</td> <td><a href="/delete_orders/{{key.id}}/1/">删除</a></td> </tr> {% endfor %} 订单id:{{key2.id}},创建时间:{{key2.create_time}},地址:{{key2.address}}<br> {% if not key2.status %} <input type="submit" value="支付"> {% endif %} <a href="/delete_orders/{{key2.id}}/2/">删除</a> {% endfor %} </tbody> </table> </div> {% endfor %} </div>{% endblock %}

(1)通过{% forkey1 in Orders_set %}来遍历Orders_set中每一个字典类型。

(2)然后通过{% forkey2,value in key1.items %}来遍历字典类型中每一个参数和值。

(3)接下来通过{% forkey in value %}遍历key值下的每一个单独订单类型。

(4)最后通过{% ifnot key2.status %}判断当前订单是否支付,如果没有支付,显示【支付】按钮,如图3-20所示。

图3-20 查看所有订单

4.接口测试

1)测试用例

表3-16为生成所有订单的测试用例。同测试单个订单一样,测试程序通过初始化一个订单数据和对应的总订单数据,形成一个订单和对应的总订单,验证这些可以正确地被显示出来。

表3-16 生成所有订单的测试用例

编号

描述

期望结果

1

显示当前用户的所有订单

当前用户的所有订单被正确地显示

2)XML数据文件

在orderConfig.xml后面加上。

...<!--- 显示当前用户的所有订单 --> <case> <TestId>order-testcase003</TestId> <Title>订单信息</Title> <Method>get</Method> <Desc>显示当前用户的所有订单</Desc> <Url>http://127.0.0.1:8000/view_all_order/</Url> <InptArg></InptArg> <Result>200</Result> <CheckWord>上海市外滩一号</CheckWord><!--- 检查订单中的地址信息是否被正确显示 --> </case>...

3)测试代码

测试代码保持不变。

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

下一篇
举报
领券