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

简介: 顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

3.7 订单模块


订单模块包括“显示总的订单”“显示所有的订单”“删除单个订单中”以及“删除总订单”。由于一个总订单关联多个订单,并且订单与用户、商品以及用户收货地址都有相应的对应关系,所以这里程序处理的业务逻辑是比较复杂的。单个订单的数据模型如下。


...
#单个订单
class  Order(models.Model):
         order =  models.ForeignKey(Orders)                          #关联总订单id
         user = models.ForeignKey(User)                                    #关联用户id
         goods = models.ForeignKey(Goods)                              #关联商品id
         count = models.IntegerField()                                   #数量
...


总订单的数据模型如下。

...
#总订单
class  Orders(models.Model):
         address = models.ForeignKey(Address)                                             #关联送货地址id
         create_time =  models.DateTimeField(auto_now=True)                         #创建时间
         status = models.BooleanField()                                                            #订单状态
         def __str__(self):
                   return self.create_time
...


3.7.1总订单的生成和显示

1. urls.py

...
url(r'^create_order/$', views.create_order),
url(r'^view_order/(?P<order_id>[0-9]+)/$',  views.view_order),
...


1orders_id为单个订单的id

显示一个订单首先要生成一个订单,然后把这个生成的订单显示出来。


2. views.py

方法create_order()用于生成订单

...
# 生成订单信息
def create_order(request):
    util = Util()
    username =  util.check_user(request)
    if  username=="":
        uf = LoginForm()
        return  render(request,"index.html",{'uf':uf,"error":"请登录后再进入"})
    else:
                  #根据登录的用户名获得用户信息
        user_list =  get_object_or_404(User, username=username)
                  #从选择地址信息中获得建立这个订单的送货地址id
        address_id =  (request.POST.get("address", "")).strip()
                  #如果没有选择地址,返回错误提示信息必须选择一个地址!
        if  address_id=="":
            address_list =  Address.objects.filter(user_id=user_list.id)
            return  render(request, 'view_address.html', {"user": username,'addresses':  address_list,"error":"必须选择一个地址!"})
                  #否则开始形成订单
                  else:
            #把数据存入数据库中的总订单表
            orders =  Orders()
                           #获得订单的送货地址id
             orders.address_id = int(address_id)
                           #设置订单的状态为未付款
            orders.status =  False
                           #保存总订单信息
            orders.save()
            #准备把订单中的每个商品存入单个订单表
                           #获得总订单id
            orders_id =  orders.id
                           #获得购物车中的内容
            cookie_list =  util.deal_cookes(request)
                           #遍历购物车
            for key in  cookie_list:
                                     #构建对象Order()
                order =  Order()
                                     #获得总订单id
                 order.order_id = orders_id
                                     #获得用户id
                 order.user_id = user_list.id
                                     #获得商品id
                 order.goods_id = key
                                     #获得数量
                order.count  = int(cookie_list[key])
                                     #保存单个订单信息
                order.save()
            #清除所有cookies,并且显示这个订单
            response =  HttpResponseRedirect('/view_order/'+str(orders_id))
            for key in  cookie_list:
                 response.set_cookie(str(key),1,0)
            return response
...


1)登录用户通过语句user_list= get_object_or_404(User, username=username)显示登录用户信息。

2)通过语句address_id= (request.POST.get("address", "")).strip()获取订单所对应的收货地址。

3)如果没有选择,那么调用view_address.html模板,显示“必须选择一个地址!”的错误信息。

4)否则开始生成订单,通过语句orders = Orders()获得总订单类变量orders


①通过语句orders.address_id = int(address_id)orders.status =False设置订单的地址id以及字符状态为False,即“未支付”。

②通过语句orders.save()把总订单信息保存在数据库中。

③存储完毕,系统生成总订单中的每个商品订单信息,通过语句orders_id = orders.id获得总订单id

④通过语句cookie_list = util.deal_cookes(request)获得购物车中的所有商品。

⑤通过循环语句for key in cookie_list遍历这些商品。

⑥通过语句order = Order()建立单个订单类变量order

⑦通过语句order.order_id = orders_idorder.user_id =user_list.id order.goods_id = keyorder.count = int(cookie_list[key])order类变量中赋予总订单id、用户id、商品id以及商品个数。

⑧通过语句order.save()保存到数据库中。

⑨最后通过循环语句for key in cookie_list遍历购物车里面的所有商品。

⑩利用语句response.set_cookie(str(key),1,0)清除购物车中的所有商品。


方法view_order()用于显示单个订单信息。

...
# 显示订单
def view_order(request,orders_id):
    util = Util()
    username =  util.check_user(request)
    if  username=="":
        uf = LoginForm()
        return  render(request,"index.html",{'uf':uf,"error":"请登录后再进入"})
    else:
        #获取总订单信息
        orders_filter =  get_object_or_404(Orders,id=orders_id)
        #获取订单的收货地址信息
        address_list =  get_object_or_404(Address,id=orders_filter.address_id)
        #获取收货地址信息中的地址
        address =  address_list.address
        #获得单个订单表中的信息
        order_filter =  Order.objects.filter(order_id=orders_filter.id)
        #建立列表变量order_list,里面存放的是每个Order_list对象
        order_list_var = []
        prices=0
        for key in  order_filter:
            #定义Order_list对象
            order_object =  Order_list
            #产生一个Order_list对象
            order_object  =util.set_order_list(key)
            #把当前Order_list对象加入到列表变量order_list
             order_list_var.append(order_object)
#获取当前商品总价钱
            prices =  order_object.price * order_object.count + prices
        return  render(request, 'view_order.html', {"user": username,'orders':  orders_filter,'order': order_list_var,'address': address," prices":str(prices)})
...


1)登录用户通过语句orders_filter= get_object_or_404(Orders,id=orders_id)获得总订单信息。

2)通过语句address_list= get_object_or_404(Address,id=orders_filter.address_id)获得总订单的收货地址信息以及语句address = address_list.address获得收货地址信息中的地址内容信息。

3)通过语句order_filter= Order.objects.filter(order_id=orders_filter.id)返回所有该订单下的单个订单信息。

4)通过循环语句forkey in order_filter遍历所有的单个订单信息。

5)在循环体内通过order_object= Order_list语句定义Order_list对象。

6通过order_object=util.set_order_list(key)语句调用Util类中的set_order_list方法(下面介绍),返回Order_list对象。

7)由语句order_list_var.append(order_object)Order_list对象封装在order_list_var变量中(order_list_var在循环外被初始化)。

8)由语句prices =order_object.price * order_object.count + prices计算总订单中所有的商品价钱

9)最后调用view_order.html模板。


调用模板的参数中包括。

user:用户名。

orders:总订单信息。

order:单个订单列表信息,里面是多个Order_list对象。

address:收货地址信息。

prices:总价格信息。


方法set_order_list()goods/util.py中定义。

...
#定义单个订单变量
         def  set_order_list(self,key):
        order_list =  Order_list()
         order_list.set_id(key.id)#主键
        good_list =  get_object_or_404(Goods,id=key.goods_id)#获得当前商品信息
         order_list.set_good_id(good_list.id)#订单中商品id
         order_list.set_name(good_list.name)#订单中商品名称
         order_list.set_price(good_list.price)#订单中商品价格
         order_list.set_count(key.count)#购买数量
        return order_list
...


        方法返回的是Order_list类,Order_list类在object.py中定义。

...
#订单模型
class Order_list():
    #订单id
    def set_id(self,id):
        self.id=id
    #订单中商品id
    def  set_good_id(self,good_id):
        self.good_id=good_id
    #订单中商品名称
    def set_name(self,name):
        self.name=name
    #订单中商品价钱
    def  set_price(self,price):
        self.price=price
    #订单中商品数量
    def  set_count(self,count):
        self.count=count
    #商品总价钱(个数*单价)
    def  set_prices(self,prices):
        self.prices=prices
...


星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net


顾翔凡言:

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

目录
相关文章
|
4月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
115 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测试脚本。
51 0
基于Django的电子商务网站开发(连载39)
|
测试技术 Python
基于Django的电子商务网站开发(连载38)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
59 0
|
存储 安全 前端开发
基于Django的电子商务网站开发(连载37)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
120 0
基于Django的电子商务网站开发(连载37)
|
测试技术 Python
基于Django的电子商务网站开发(连载36)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
66 0
基于Django的电子商务网站开发(连载36)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载35)
基于Django的电子商务网站开发(连载35)
79 0
|
XML 测试技术 数据库
基于Django的电子商务网站开发(连载34)
基于Django的电子商务网站开发(连载34)
45 0
基于Django的电子商务网站开发(连载34)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载33)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
69 0
基于Django的电子商务网站开发(连载33)
|
5天前
|
前端开发 UED Python
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
Wagtail-基于Python Django的内容管理系统CMS实现公网访问