前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Django的电子商务网站开发(连载32)

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

作者头像
顾翔
发布2019-12-11 16:50:46
4670
发布2019-12-11 16:50:46
举报

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

顾翔老师开发的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),...

(1)orders_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_id、order.user_id =user_list.id 、order.goods_id = key和order.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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.7 订单模块
    • 3.7.1总订单的生成和显示
      • 1. urls.py
      • 2. views.py
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档