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

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

3.7.2查看所有订单


1urls.py

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


2views.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_listorder_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_objectOrders_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所示。

     

image.png

                  3-20 查看所有订单


4.接口测试

1)测试用例

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


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

编号

描述

期望结果

1

显示当前用户的所有订单

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


2XML数据文件

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


顾翔凡言:

      软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。

目录
相关文章
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
103 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
SQL XML 前端开发
基于Django的电子商务网站开发(连载40)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
89 0
|
安全 测试技术 Python
基于Django的电子商务网站开发(连载39)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
50 0
基于Django的电子商务网站开发(连载39)
|
测试技术 Python
基于Django的电子商务网站开发(连载38)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
58 0
|
存储 安全 前端开发
基于Django的电子商务网站开发(连载37)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
119 0
基于Django的电子商务网站开发(连载37)
|
测试技术 Python
基于Django的电子商务网站开发(连载36)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
64 0
基于Django的电子商务网站开发(连载36)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载35)
基于Django的电子商务网站开发(连载35)
77 0
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载33)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
68 0
基于Django的电子商务网站开发(连载33)
|
存储 测试技术 数据库
基于Django的电子商务网站开发(连载32)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
59 0
|
1月前
|
监控 安全 应用服务中间件
python中Django入门(四)
python中Django入门(四)
31 0