1.3.4 HTTP的连接性 通信中无连接的含义是限制每次连接只处理一个请求。服务器处理完客户端的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。...当发送邮件的时候,虽然信封上有收件人的地址和邮编,但是邮件有无收到,不通过其他方式,是不可能知道的,所以无连接的通信是不可靠的;而打电话是有连接的,正常情况包括拨号,应答和挂断,如果对方正在通话显示忙音...HTTP协议是无连接的,这是由于早期HTTP 协议产生的时候,服务器需要同时处理面向全世界数十万、甚至上百万个客户端的网页访问,但是每个浏览器与服务器之间交换的间歇性是比较大的,并且网页浏览的发散性导致了两次传送的数据关联性是很低的...大部分Web 服务器,包括Django、IIS 和 Apache,都支持 HTTPKeep-Alive。对于提供静态内容的网站来说,这个功能通常是非常有用的。...但是,对于负担较重的网站来说,这里存在另外一个问题,就是对性能的影响。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive功能对资源利用的影响尤其突出。
4.接口测试 在这里就测试方法上对本书第2.10节的基础上进行了一些优化,优化的方法主要是通过利用Python对数据库的访问以及接口测试相结合的方法来进行相应的测试。...1)测试用例 表3-1为注册模块的测试用例,这里共设计了两个。 (1)注册一个数据库中已经存在的用户,系统应该提示“用户名已经存在!”。...(2)注册一个数据库中不存在的用户,系统应该注册成功,然后进入登录页面。 表3-1 注册模块的测试用例 编号 描述 期望结果 1 注册的用户名已经存在 有提示信息“用户名已经存在!”...将通过测试程序中的setUp()中由Python语言的基础类sqlite3(注意,在这里不是通过Django提供的数据库操作模块)向数据库中插入记录,然后运行程序来进行测试,最后测试结束,需要在tearDown...把本书第2.10.5节中getXML.py中的类GetXML封装在一个名为util.py的文件中,并且把头部的两行建立在这个类的构造方法中。
(4)旧密码、确认密码与新密码设置正确,显示“密码修改成功”的信息。...旧密码不正确”2000000000000000000提示“新密码不能与旧密码相同”3000000123456654321提示“确认密码与新密码不匹配”4000000123456123456显示“密码修改成功”的信息...2)XML数据文件 根据测试用例的设计,这里的测试配置文件userInfoConfig.xml加入如下内容。...读者有没有发现,由于前面对测试代码进行了比较好的封装和优化,使得接口测试工作变得更加简单。
4.接口测试 1)测试用例 表3-8为查看购物车中内容的测试用例,上一节把商品放入购物车内,在这里验证进入购物车的商品信息是否可以正确地被显示出来。...可以看到,在写代码的时候,需要不停地优化代码,这样可以使得以后更好更方便地调用代码,从而使代码达到较高的复用性和较好的易维护性。...所以代码的优化也是通过不断迭代来完成的,一开始就完成一个优秀的代码,是不太可能的,就像我写这本书一样,也是经过不断调整优化而完成的。...3.模板 当用户修改商品数量以后,不管填写的数字是否合法,均返回查看购物车页面,所以在这里的模板与“查看购物车”模块的模板一样。...在修改数量的form表中,输入框的name为"count"+商品的id,由于测试数据的商品id均为0,所以输入框的name为count0 3)测试代码 测试代码在这里不做任何修改。
3.4 商品信息模块 商品信息模块包括“商品信息的维护”“商品概要信息的分页显示”“根据商品名称的模糊查询”和“对某一条商品显示其详细信息”。商品信息的维护通过Django提供的后台进行操作。...商品信息的维护包括商品信息的添加、修改和删除。...由于Django提供了相当庞大的后台管理模块,所以对于商品信息的维护就使用Django提供的后台。...通过http://127.0.0.1/admin/进入Django提供的后台,找到goodss一行,如图3-7所示。 ? 图3-7 商品信息维护界面 点击图标进入图3-8,添加商品信息。 ?...,删除选择的商品信息。如图3-10所示。 ? 图3-10删除选择的商品信息 点击商品名称的链接,就可以修改这条商品信息的记录,如图3-11所示。 ?
(2)修改一个当前登录用户已经存在的地址信息,系统应该报“这个地址已经存在!”的错误信息。...表3-13 送货地址修改的测试用例 编号 描述 期望结果 1 修改一个该用户没有使用过的地址 修改成功,并且可以正确地显示 2 修改一个该用户已经使用过的地址 显示“这个地址已经存在!”...在此特别说明,为了保证每一个测试用例的独立性,每一个测试用例尽可能做到不依赖于其他的测试用例。如果需要依赖,必须把依赖的测试用例联合在一起执行。...需要特别指出的是,在这里代码不删除初始化信息,是为了尽可能保证每一条测试用例之间的相互独立性。...在第3.5.4节中为了保持每一条测试用例的独立性,也应该另外建立一条购物车中的商品,然后进行删除,有兴趣的读者可以自己去修改完成。
顾翔老师开发的bugreport2script开源了,希望大家多提建议。...经过了手工测试,发现结果是非常让人满意的,Django框架已经帮助实现了对XSS注入的防范。...具体来说,它是利用现有应用程序,将(恶意)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句...比如先前的很多影视网站泄露VIP会员密码大多就是通过Web表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。”...年10月 【6】《Python新手使用Django 建站的16堂课》,何敏煌著,清华大学出版社,2017年5月 【7】hornbills,支付宝即时到帐接口的python实现,示例采用django框架:
接口测试 1)测试用例 表3-12为送货地址的添加与显示的测试用例。在这里设计两个测试用例。 (1)添加一个当前登录用户不存在的收货地址信息,系统应该添加成功。...(2)第二个测试用例添加一个当前登录用户已经存在的地址信息,系统应该报“这个地址已经存在!”的错误信息。...表3-12 送货地址的添加与显示的测试用例 编号 描述 期望结果 1 为当前登录用户添加一个新的地址信息 添加成功,并且可以正确地显示 2 为当前登录用户添加一个已经存在的地址信息 显示“这个地址已经存在...由于后面的测试程序存在页面中不存在信息的验证,所以保留if "NOT" in mylist["CheckWord"]语句的验证。另外如果是新建的记录,那么验证后立即把这条记录删除。...-- /container --> 由于在修改的时候需要显示以前的地址信息内容,所以不能使用AddressForm类,只能用HTML语言把form信息写出来,见图3-18
顾翔老师开发的bugreport2script开源了,希望大家多提建议。...图3-19 显示当前生成的订单 4. 接口测试 1)测试用例 表3-15为生成订单的测试用例,这个订单仅包含一个订单。...测试程序通过初始化一个订单数据和对应的总订单数据,形成一个订单和对应的总订单,验证是否可以正确地被显示出来。...表3-15 生成一个订单的测试用例 编号 描述 期望结果 1 生成并且显示当前用户的一个订单 生成并且正确地被显示 2)XML数据文件 首先在initInfo.xml建立订单信息。 <!...这里的测试用例与购物车的测试用例第一条是一样的。建立测试配置文件orderConfig.xml。 <?xml version="1.0" encoding="UTF-8"?
3.3.2用户登录 注册的用户可以通过登录页面登录系统。由于这个模块在前面讲得比较多了,在这里不做过多的解释。...uf = LoginForm(request.POST) if uf.is_valid(): # 寻找名为 "username"和"password"的POST...参数,而且如果参数没有提交,返回一个空的字符串。.../favicon.ico"> 电子商务系统-登录 电子商务系统
第3章电子商务网站的实现 3.1 需求描述 3.1.1用户信息模块 用户信息模块包括“用户信息的注册”“用户登录”“显示用户信息”和“用户密码的修改”。 (1)注册信息包括用户名、密码和邮箱。...(1)“商品信息的维护”包括增加、修改和删除操作,是利用Django的后台来完成的。 (2)“商品概要信息的分页显示”包括显示商品信息的id、名称、价钱以及查看详情和放入购物车的操作链接。...(1)“购物车中所有商品的显示”通过列表来实现的,包括显示商品id、商品名称、单价、商品个数以及移除的操作链接。点击“商品id”可以查看对应的商品详细信息。...3.1.4 送货地址模块 送货地址模块包括“送货地址的显示”“送货地址的添加”“送货地址的修改”和“送货地址的删除”。...(1)“送货地址的显示”可以在生成订单选择送货地址的时候,也可以在查看用户信息的时候。 (2)“送货地址的添加”可以添加当前用户账号下的一个或多个送货地址。
顾翔老师开发的bugreport2script开源了,希望大家多提建议。...用一个POST请求做个比方,黑客可以构建自己的网页form界面,form的action指向要攻击的网站,form中元素的name与攻击网站的值保持一致,从而达到CSRF攻击的目的。...比如被攻击的网站是http://www.a.com,页面提交网站是http://www.a.com/input.html,提交后处理的网站是http://www.a.com/display.jsp,input.html...在作者著作《软件测试技术实战 设计、工具及管理》一书中序言中曾经提及这么一件事情: “2000年我所在的公司与CCTV‘开心辞典’目组合作开发网上答题的项目,这是一个智力娱乐性节目,我编写了前端的答题代码...4.2.3 Django是如何防范CSRF攻击的 在第2.3.2节就介绍过Django是如何防范CSRF攻击机制的,而且Django默认是启动CSRF攻击机制的,在本书前几个章介绍的重点不在这里,所以把
顾翔老师开发的bugreport2script开源了,希望大家多提建议。...4.3权限操作的漏洞 试想一下,如果一个名为Linda的用户,登录的系统,它可以通过http://127.0.0.1:8000/update_address/1306/2/修改他的收货地址信息,另一位名为...这就产生了一个安全缺陷,解决这个缺陷的方法是在修改之前先来判断这个收货地址信息是否属于这个登录用户,如果不是抛出异常信息,不进行相应的操作。在goods/util.py中加上如下代码。 ......然后修改view.py中的方法update_address()。...图4-2 出错信息提示 对于收货地址的删除操作也加上如下代码。
1.2.2 Django的安装 安装完毕Python,接下来来安装Django,关于Django安装有以下四种方法。 1....利用tar.gz安装 到网上去下载gz包,例如,Django-1.10.3.tar.gz文件,其中1.10.3是Django的版本号,然后进入目录内,运行如下命令。 ......GitHub上安装 可以利用类似于Eclipse,Atom到GitHub网站上去安装Djando。...https://github.com/django/django是Djando在GitHub上的地址。...是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。
来看下图1-8,这是一个用Fidder4捕捉到访问http://www.3testing.com网站的请求内容。...后面的都是为请求头,关于请求头,具体介绍读者可以上RFC 2616官方网站查询,在这里不进行介绍了。 由于这个请求没有没有请求数据,所以没有请求正文。...图1-9是一个带请求数据的POST请求的请求正文例子。 ? 图1-9 Fiddler 4 捕捉HTTP的请求正文 1.3.3 HTTP的应答 HTTP的应答返回码包含服务器响应情况,见表1-1。...看下图1-10,这是一个用Fidder4捕捉到访问http://www.3testing.com网站的应答内容。 ?...下面的都为应答头,大家也可以上RFC 2616官方网站查询。 返回正文就是一般所看到的HTML代码。
3.4.4 商品信息的详情显示 查看商品信息详情的实现方法与查看商品信息列表在实现方法上基本相同。 1. urls.py ...url(r'^view_goods/(?...P[0-9]+)/$'表示view_goods/后面跟着一个由数字组成的字符串,这个字符串定义为变量good_id,供views.py中使用。good_id为商品信息的id。...接口测试 1)测试用例 表3-6为商品详情信息测试用例,测试目的是把测试数据中的商品信息插入到数据库中,检验这个商品的详细信息是否可以正确地被显示出来。...表3-6 商品详情信息测试用例 编号 描述 期望结果 1 显示当前商品的详细信息 当前的商品信息被正确地显示出来 2)XML文件 在这里仍旧使用initInfo.xml加入初始化商品数据。...--- 与初始化商品详细信息保持一致 --> ... 3)测试代码 在这里接口测试的代码与前面相同,不需要做任何改动。
self.assertIn(mylist["CheckWord"],str(data.text)) def tearDown(self): #获取初始化数据库中的记录主码
在这个系统的所有测试用例中,均要先在数据库里建立一个新用户,然后用这个建立的用户进行操作,最后在测试结束的时候,删除这个用户。...(1)与间的数字为建立用户的id,由于Django后台主键自增变量默认是从1开始的,所以在这里赋值为0,以避免冲突。...(2)与间的字符串是建立用户的用户名。 (3)与间的字符串是建立用户的密码。...(4)与间的字符串是建立用户的Email地址。 建立测试项目中的interface/util.py。...在这里把数据库的操作进行封装,interface/util.py中的Util类中定义一个名为insertTable()的方法。
顾翔老师开发的bugreport2script开源了,希望大家多提建议。...由于一个总订单关联多个订单,并且订单与用户、商品以及用户收货地址都有相应的对应关系,所以这里程序处理的业务逻辑是比较复杂的。单个订单的数据模型如下。 ......总订单的数据模型如下。 ......(1)orders_id为单个订单的id 显示一个订单首先要生成一个订单,然后把这个生成的订单显示出来。...address_list.address获得收货地址信息中的地址内容信息。
顾翔老师开发的bugreport2script开源了,希望大家多提建议。...3.9建立自定义的错误页面 在这里我们主要介绍如何建立自定义的403、404、500错误页面,先建立403.html、404.html和500.html,分别如图3-21、图3-22、图3-23所示。... 搜索你想要的或者刷新网页吧!...最后在views.py中做如下的设置。......from django.shortcuts import render def page_not_found(request): return render(request, '404.
领取专属 10元无门槛券
手把手带您无忧上云