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)测试代码
测试代码保持不变。
星云测试
奇林软件
联合通测
顾翔凡言:
软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。