Web接口开发与自动化测试——基于Python语言(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-31 11:07:27

点击下载

作者:虫师

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Web接口开发与自动化测试——基于Python语言

Web接口开发与自动化测试——基于Python语言试读:

前言

本书的原型是我整理的一份Django学习文档。在从事软件测试工作的这六七年里,我一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮助到许多软件测试人员。

说回到接口测试的话题上来,根据分层自动化测试的思想,上层为UI层。关于UI层的自动化测试我们已经很熟悉了,许多技术和工具都是围绕这一层来设计的,我们要想做自动化,首先想到和尝试去做的也是这一层的自动化实现。底层为单元测试,对于单元级别的自动化测试来说,虽然大多数测试人员并没有真正做过,但我们知道,它一般使用单元测试框架,通过一段代码去测试另一段代码;而接口测试刚好处于中间层,不太好理解,也不太好解释,因为在开发的项目中只有程序目录/文件、类、方法、函数这些,并没有一个叫作“接口”的东西。但是,它却又无处不在,是一个出现频率极高的词,时刻挂在开发人员的嘴边。

什么是接口?如何对接口进行测试呢?我曾经也有很长一段时间并不太理解什么是接口测试。为什么没有一本讲接口测试的书呢?性能测试和UI自动化测试的书籍每年都会出版好几本,与之相比,几乎找不到一本专门介绍接口测试的书。现在想来可能是因为它太简单了吧!简单到没什么可讲的,甚至接口测试比功能测试还要简单得多。但是,真的做好接口测试又很难,或者说难点并不在于接口测试本身,而是需要有读懂接口代码处理逻辑的能力,这就要求你必须具备一定的开发基础,因而对许多测试人员来说,已经形成了门槛。

要写一本关于接口测试的书,一种讨巧的做法就是把目前主流的接口测试工具都介绍一遍,这很符合主题。然而,我并不认为把这些工具都学好就可以做好接口测试。举一个简单的例子,我的接口使用了加密,例如,用时间戳+密钥生成AES加密字符串,再将字符串生成base64字符串作为接口参数传输,这其实是一种常见的加密策略,而我所了解的大多数接口测试工具都无法做到对这种加密接口的测试。原因很简单,加密算法和加密策略多种多样,而工具却很难模拟这种多样性的加密策略。但是,站在开发的角度上看,接口测试就很简单了,开发怎么调用,测试就怎么调用呗!只不过测试的目的是验证在传各种参数的情况下,接口是否可以正确地处理并返回结果。

所以,我选择另一种需要很高学习成本的方法来讲解接口测试,从Web接口开发讲起,理解了接口是如何开发的,再做接口测试自然就变得非常简单了。你会看到本书前几章都是在讲Web开发以及Web接口开发,你可能会怀疑自己是不是买错书了,明明是要学习接口测试的,怎么介绍的都是开发的技术。其实,如果你只是想学习Web开发的话,那么本书也是一本不错的入门教程。

本书共分为15个章节,涵盖了不少话题,这也是我在写作时对自己的要求,不要讲解太基础的东西,不要讲太多无聊的概念,要有很强的可操作性。第1章是Python基础,第2~5章是Web开发,第6章是单元测试,第7~10章主要讲接口的概念、开发与测试,第11章介绍安全接口的开发与测试,第12~13章讲Web Service技术,第14~15章介绍项目的部署与性能测试。所以,这并不是一本单纯面向测试人员的书,同样适合开发的小伙伴阅读。

到了感谢部分,首先,感谢身边的同事,一年多的接口自动化测试实践过程中,我收获了很多,感谢测试经理唐亮对我们在尝试新技术时的支持,感谢开发组的蓝仕坤、陈晓发在技术上给了我很大的帮助。其次,感谢接口自动化测试群里的小伙伴,他们给本书提了很多建议,包括本书的名字,也是在群里投票的结果。再次,感谢我的妻子,她默默地容忍着我每天晚睡的坏习惯,感谢她一直以来的包容与理解。最后,感谢编辑安娜,没有她这本书也不会出版,我们合作一直很愉快。

由于作者水平有限,希望你带着怀疑的精神阅读本书,如果发现错误,欢迎批评指正。2017年1月13号凌晨虫师第1章Python学习必知

本书将以Python编程语言为基础来介绍开发与测试技术,所以,在阅读本书之前要求读者具备一定的Python语言编程能力。以我个人学习Python的经历,以及帮助别人解答Python问题的经验来看,对于初学Python的人来说,遇到的大多数问题并不是Python的语法,如果读者稍有编程语言基础,那么很容易就能学会Python的语法,而且对于这方面的学习,可以轻松地找到大量的文章、书籍和视频教程等。然而,他们问的更多的问题是Python版本的选择、环境的设置、第三方扩展库的安装、IDE的选择,以及遇到程序报错之后怎么解决等。那么,本章将试着帮你清除这些障碍,使你后续的Python学习过程变得更加顺利。1.1 Python 2.x与Python 3.x选择

对于想要学习Python的同学来说、首先要面对的就是版本选择的问题。到底是选择学习Python 2.x还是Python 3.x?这主要由Python语言发展的历史遗留问题所导致。

Python语言早在1989由Guido van Rossum开发,第一个公开发行版发行于1991年。因为早期的Python版本在基础方面设计存在着一些不足之处。因此在2008年的时候,Guido van Rossum又重新发布了Python 3.0,Python 3在设计的时候很好地解决了这些遗留问题,然而Python 3带来的最大的问题就是不完全向后兼容,当时向后兼容的版本是Python 2.6。然而经过多年的发展,Python(2.0版本)已经成为了一门应用非常广泛的编程语言,大量的项目在Python语言上运行,围绕着Python语言有着极其丰富的类库,无法一下子就让所有项目和类库都转到Python 3.0上面。于是,两个版本就进入了长期并行开发和维护的阶段。

正是由于官方对Python 2.x的纵容态度,致使到目前为止,Python 2的使用者依然过半。从近两年来看,官方的态度有所改变,Python 2.x的开发逐渐进入消极状态,版本更新速度明显要比Python 3.x要慢得多,而且不再加入新的特性,以维护为主。Python语言作者Guido van Rossum宣布Python 2.7支持时间延长到2020年。Python 2.7是2.x系列的最后一个版本。这将有利于Python 3的发展。

对于新手来说,建议直接学习Python 3.x,因为Python 3.x代表了Python发展的未来。目前主流的库基本都已支持Python 3.x,不支持的库也在积极地向Python 3.x迁移。在本书中除非特别声明,否则默认情况下所有代码都将在Python 3.x下运行。

注:Python 3.x和Python 2.x,x表示小版本号。当前Python最新的两个稳定版本分别为Python 3.5.2和Python 2.7.12。如果没有特别说明,本书将以Python 3来指代Python 3.x,用Python 2指代Python 2.x。1.2 Python的安装

Python的安装相当简单,但仍有一些细节需要注意。1.2.1 在Windows下安装Python

Python下载地址:https://www.python.org/downloads/。

当前最新版本为Python 3.5.2。读者可根据自己的系统平台选择相应的版本进行下载。对于Windows用户来说,如果是32位系统则选择x86版本;如果是64位系统,则选择x86-64版本。建议选择“executable installer”版本下载,下载完成后会得到一个以.exe为后缀的文件,双击进行安装,如图1.1所示。图1.1 Python安装界面

安装过程中记得勾选“Add Python 3.5 to PATH”选项。安装完成后将会在开始菜单中生成Python 3.5的目录,如图1.2所示。图1.2 Python 3.5的目录

在Windows系统中,安装好的Python提供了四个选项:● IDLE(Python 3.5 64-bit):Python自带的IDE,推荐新手使用它

来编写Python程序。● Python 3.5(64-bit):在Windows命令提示符下进入Python Shell

模式。● Python 3.5 Manuals(64-bit):Python自带的官方文档。● Python 3.5 Module Docs(64-bit):Python的模块文档。它自动

启动一个服务,以Web形式显示Python模块的文档。1.2.2 安装Python 2和Python 3两个版本

虽然Python 3正在逐渐取代Python 2,但是从目前来看,Python 2的使用者仍然过半,除Python 2的坚定拥护者外,最主要的原因是仍有少部分的第三方库还不支持Python 3,但这种情况在不断改善中。所以,有时为了使用某个库而不得不在两个版本之间进行切换。这时就需要在系统中同时安装两个Python版本了。

当然,Python早就考虑到了可能会有这样的需求,所以,它允许你在一个操作系统中同时安装两个版本。并且,主流Linux(例如Ubuntu)系统已经默认为你安装了两个版本的Python。如果是Windows系统,那么你需要手动来安装两个版本的Python。不过,在使用两个版本的时候,需要做好区分。

例如,我本机先安装的Python 2.7,如图1.3所示。图1.3 Python 2.7目录

在Python 2.7的根目录下,Python的可执行文件名为“python.exe”。当要运行Python 2.7版本时,只需在Windows命令提示符下输入“python”命令即可,如图1.4所示。图1.4 进入Python 2.7 Shell模式

然后,又安装了Python 3.5。再来看看Python 3.5的目录,如图1.5所示。图1.5 Python 3.5目录

除了生成一个“python.exe”文件外,还多了一个“python3.exe”文件。此时,如果想运行Python 3.5,就可以使用“python3”命令,如图1.6所示。图1.6 进入Python 3.5 Shell模式

需要说明的是,Python可执行文件“python.exe”的名称是可以随意修改的。只要能有效区分两个Python版本即可。

注:如果没有特别说明,本书接下来的所有地方都将用“python 3”来指代Python 3.5的“python”命令。1.2.3 “python”不是内部或外部命令

这个问题也是新手可能会遇到的,虽然在安装Python的时候,已经提醒你勾选“Add Python 3.5 to PATH”选项,但也许你并未留心这个提示,如图1.7所示。图1.7 “python”不是内部或外部命令

此时先要确定Python安装到哪个目录。如图1.3和1.5所示,分别为我的Python 2.7和Python 3.5的安装目录,并且将它分别添加到系统环境变量Path下面,如图1.8所示。图1.8 Windows环境变量Path1.3 扩展库的安装

如果只学习Python基本语法,那么安装好Python就可以开始找一本Python基础教程,照着书中的例子逐个地进行练习。但大多数情况下,我们学习Python是带有一定目的的。例如,我要开发Web网站,我要做Web UI自动化测试,这就少不了要去安装第三方扩展库了。

所以,接下来你可以在PyPI(Python Package Index)中查找想要的库了。

PyPI地址:https://pypi.python.org/pypi

如果你知道要找的库的名字,那么只需在右上角搜索栏查找即可。不同的库提供的安装方式可能会有所不同,这里介绍几种常用的安装方式。1.3.1 pip安装扩展库

pip是一个安装和管理Python包的工具,通过pip来管理Python包非常简单,省去搜索→查找版本→下载→安装等烦琐步骤。

当安装完Python之后,在Windows命令提示符下输入“pip”命令。cmd.exe> pip Usage: pip [options] Commands: install Install packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. search Search PyPI for packages. wheel Build wheels from your requirements. zip DEPRECATED. Zip individual packages. unzip DEPRECATED. Unzip individual packages. bundle DEPRECATED. Create pybundles. help Show help for commands. General Options: -h, --help Show help. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. --log-file Path to a verbose non-appending log, that only ……

如果出现pip命令的说明信息,则说明pip可以正常使用。如果提示“pip不是内部或外部命令”,则请参考第1.2.3节,找到pip可执行文件的所在目录(例如,...\Python35\Scripts\),将它添加到系统环境变量Path下面。

还有一个问题,如何分辨是Python 2还是Python 3的pip?

这个问题也很简单,首先“pip”命令与前面提到的“python”命令一样。同样是一个可执行文件,其文件名称也可以随意修改,可以将它们分别重命名为“pip2.exe”和“pip3.exe”分别表示两个Python版本下的“pip”命令。读者可以在Python的安装目录下查看pip的可执行文件名。例如:

C:\Python27\Scripts\

C:\Python35\Scripts\

❶ 使用pip安装扩展库。cmd.exe> pip install django

Django是Python下面开发Web项目非常强大的一个库,也是本书接下来要学习的重点。

❷ 使用pip安装指定版本的库。cmd.exe> pip install django==1.10.3

如果不指定安装库的版本,那么pip默认会安装库的最新版本,也可以指定某个版本安装,前提是你需要知道具体的版本号。

❸ 使用pip查看当前安装的库。cmd.exe> pip show django Name: Django Version: 1.10.3 Summary: A high-level Python Web framework that encourages rapid developme nt and clean, pragmatic design. Home-page: http://www.djangoproject.com/ Author: Django Software Foundation Author-email: foundation@djangoproject.com License: BSD Location: c:\python35\lib\site-packages Requires:

不同的库显示的信息会有所不同,一般通过show命令查看,会显示当前的版本号以及安装路径。

❹ 使用pip卸载库。cmd.exe> pip uninstall django

使用uninstall命令即可将安装的库轻松卸载。1.3.2 tar.gz文件安装

并不是所有的扩展库都支持用pip命令安装。个别库只提供了压缩包文件下载,或者有些人的安装环境并不能上网。

如图1.9所示,单击Django-1.10.3.tar.gz文件进行下载,并对文件进行解压,进入解压目录,通过“python”命令安装。图1.9 Django安装包cmd.exe...\Django-1.10.3> python3 setup.py install 1.3.3 .whl文件安装

wheel本质上是一个zip包格式,它使用.whl扩展名,用于Python模块的安装。pip提供了一个wheel子命令来安装wheel包。

如图1.9所示,Django同样提供了.whl文件的下载。下载Django-1.10.3-py2.py3-none-any. whl文件,通过pip命令安装whl文件。cmd.exe> pip install Django-1.10.3-py2.py3-none-any.whl 1.3.4 GitHub克隆项目安装

Python的许多库的开源项目都是在GitHub上托管的,通过GitHub托管可以随时随地提交项目代码,而PyPI上的项目是有固定版本的。有些项目在GitHub上的代码已经对Python 3增加了支持,但在PyPI上却还未及时发布支持Python 3的版本。还有一些开源项目只在GitHub上存在,例如我的Pyse项目。所以,这里有必要介绍一下如何从GitHub上克隆Python项目安装。

以开源的Pyse为例:https://github.com/defnngj/pyse

方法一 安装Git客户端:https://git-scm.com/downloads

通过“git clone”命令将项目克隆到本地。Git Bash> git clone https://github.com/defnngj/pyse

Windows系统下面通过Git Bash克隆GitHub项目,如图1.10所示。图1.10 Git克隆项目

方法二 在GitHub项目左侧单击“Clone or download”按钮,在弹出的窗口中选择“Download ZIP”,下载zip安装包,如图1.11所示。图1.11 Download项目

标准的Python第三方库一般会提供setup.py文件,参考第1.3.2节,通过Python命令执行setup.py文件安装。1.4 开发工具选择

开发工具的选择也是初学Python的同学所面临的问题之一。当然,选择使用开发工具充满了个人偏好。如果你已经对Python编程比较熟悉了,那么一定有自己熟悉的开发工具,可以直接跳过本节。如果还在为选择使用什么开发工具而纠结,不如,听一听我的建议。1.4.1 Sublime Text3

Sublime Text是一款通用型轻量级编辑器,支持多种编程语言,有许多功能强大的快捷键(如Ctrl+d),支持丰富的插件扩展。如果平时需要在不同的编程语言之间切换,那么它将会是一个不错的选择。它也是我最喜欢的编辑器之一。

如果你安装了两个版本的Python,并且想用该编辑器分别运行两个版本的Python,那么需要手动添加配置文件。启动Sublime Text3,如图1.12所示。选择菜单栏“Tool”→“Build System”→“New Build System...”,在打开的untitled.sublime-build文件中输入以下配置信息。图1.12 Sublime Text界面untitled.sublime-b...{ "cmd": ["python3", "-u", "$file"], "encoding": "cp936", "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", }

其中“python3”为执行Python的命令,根据1.2.2节的设置,表示执行的是Python 3。

将untitled.sublime-build文件保存为:python3.sublime-build。

保存路径为...\Sublime Text 3\Packages\User\。可以通过菜单栏“Preferences”→“Browser Packages...”查看该目录的位置。

切换到配置的Python 3版本,通过菜单栏“Tool”→“Build System”→“python3”(这里的“python3”与配置文件保存时的前缀有关“python3.sublime-build”),如图1.13所示。图1.13 切换Python配置

最后,通过快捷键“Ctrl+b”执行Python程序。1.4.2 Atom

Atom由目前全球范围内影响力最大的代码仓库/开源社区GitHub开发。它开源、免费、跨平台,并且整合Git,提供类似SublimeText的包管理功能,支持插件扩展,可配置性非常高。Atom界面如图1.14所示。图1.14 Atom界面

Atom官方地址:https://atom.io/

Atom与Sublime Text有很多相似之处,Atom体积相对比较大,启动速度略慢,但它有两点是我非常喜欢的:一是代码着色看上去很舒服,二是插件的安装极其方便,只需在“Settings”中搜索插件名安装即可。

使用Atom执行Python程序,需要单独安装插件,单击菜单栏中的“File”→“Settings”→“Install”,推荐搜索安装“atom-runner”插件,否则单纯将它看成一个编辑器就好,至于Python程序的执行可以通过Windows命令提示符或Linux的终端。

Atom也有非常炫酷的插件,例如“activate-power-mode”,它会使你的编程过程变得更加有趣。1.4.3 PyCharm

PyCharm是Python重量级IDE(Integrated Development Environment),功能非常强大,自动检测语法,可以帮助我们写出更加规范的代码。比较适合开发大型Python项目,如图1.15所示。图1.15 PyCharm界面

关于PyCharm的配置也相对比较复杂,但网上也很容易找到相关的配置文章,这里不再介绍。1.5 程序报错不要慌

我们找了一本Python教程,按照书上的例子一行一行敲下来,结果一运行却出错了。报错对于初学编程的人来说是恐惧的。我这里根据经验谈谈如何应对常见的几类错误。1.5.1 缩进错误

在Python程序中,不需要用“{}”来表示一个语句体,也不需要用“;”来表示一个语句的结束。Python对程序的缩进有着严格的要求,但有时候却并不容易发现缩进问题。

如图1.16所示,程序看上去没有任何问题,但运行的时候却出现了“IndentationError:unindent does not match any outer indentation level”的错误。其实错误信息描述,已经很清楚了,但新手往往很难发现错误的原因。图1.16 Python程序报错

如果将程序全选(快捷键Ctrl+a),就会发现错误,如图1.17所示。在add()函数的语句体中,“c=a+b”前面是一个Tab的间距,而“return c”前面是四个空格的间距。所以,虽然看上去缩进是对齐的,但它们却使用了不同的缩进方法,因而会导致Python执行报错。图1.17 Sublime Text中的全选1.5.2 引包错误

引包错误也是新手经常遇到的一类问题,但这其中有一个大坑。unittest.pyimport unittest class test(unittest.TestCase): pass

运行程序。Python ShellTraceback (most recent call last): File "D:\pydemo\unittest.py", line 1, in import unittest File "C:\pydemo\unittest.py", line 3, in class test(unittest.TestCase): AttributeError: module 'unittest' has no attribute 'TestCase'

我们要引用的明明是Python自带的unittest模块,然而程序却提示“module 'unittest' has no attribute 'TestCase”。这个错误与Python的引包机制有关,当在程序中“import”一个模块或库时,Python首先会查找当前目录下是否存在同名的Python文件,如果存在则会优先引用当前目录下的同名文件。

显然,我把自己写的程序文件命名为了“unittest.py”,在程序中又引用“unittest”,那么这就相当于自引用了。而我的真实意图是引用Python的unittest模块。当然,有时也并不一定是自引用,也可能是程序的所在目录下出现了重名文件或目录。所以,在给编写的程序文件命名时一定要注意。1.5.3 编码错误

在开发Python程序的过程中,会涉及三个方面的编码,具体如下。(1)Python程序文件编码。

编写的程序本身也存在编码,一般可以在程序的开头加上“#coding=utf-8”或“#coding=gbk”,使程序统一为UTF-8或GBK编码。(2)Python程序运行环境(IDE)编码。

不管是Python自带的IDLE或是PyCharm,使用的IDE本身也会有编码。所以要清楚地知道自己的IDE所使用的编码。(3)Python程序读取外部文件、网页的编码。

最容易出现编码问题的情况应该是用Python读取外部文件、网页的时候。首先要确定读取的文件、网页的编码格式,然后通过decode()和encode()方法来进行编码转换。

decode的作用是将其他编码的字符串转换成Unicode编码。

encode的作用是将Unicode编码转换成其他编码的字符串。

当我们再遇到Python的编码问题时,从以上三个方面分析就可以很容易地解决了。1.5.4 学会分析错误

新手往往在看到程序抛出的一大堆报错时会变得手足无措,比起一大堆的报错,最难解决的问题是没有任何报错信息,而程序却无法正确地执行。如果能正确认真阅读报错信息,一般会很容易找到出现错误的原因。cmd.exe……Traceback (most recent call last): File "C:\Python35\lib\site-packages\django\core\handlers\exception.py", line 39, in inner response = get_response(request) File "C:\Python35\lib\site-packages\django\core\handlers\base.py", line 249, in _legacy_get_response response = self._get_response(request) File "C:\Python35\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Python35\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Python35\lib\site-packages\django\contrib\auth\decorators.py", line 23, in _wrapped_view return view_func(request, *args, **kwargs) File "D:\git\guest\sign\views.py", line 85, in search_phone print(phone) NameError: name 'phone' is not defined

上面是Django的一段报错信息。在分析报错信息时,一般要遵循以下两点。(1)找到自己写的程序。所以前面的一大段信息就没必要看了;根据倒数第三行的提示:“File"D:\git\guest\sign\views.py", line 85, in search_phone”(views.py文件的第85行,在search_phone函数中),找到自己写的代码“print(phone)”。(2)看最终的错误提示。最终的提示为“NameError:name 'phone' is not defined”。“NameError”为错误类型,根据错误类型可以锁定错误范围。“name 'phone' is not defined”为错误提示(名字‘phone’没有定义)。结合第一点找到自己写的程序,显然,print()打印的‘phone’变量没有定义。第2章Django入门

之所以会选择Django Web框架来做Web(接口)开发,除了它功能强大之外,最主要的原因是学习资料丰富,这一点在我看来尤为重要。对于初学者而言,如果将要学习的技术资料非常匮乏,那么学习过程就会变得异常艰难,从而容易受挫,最后放弃。相反,如果遇到问题很容易找到答案,那么学习就会变得简单得多。Django相比其他Web框架的资料来说要丰富得多。

Django是在BSD许可证下的开源项目。官方建议在Python 3的最新版本下使用Django,但你也可以在Python 2.7版本中使用它。

Django对Python版本的支持情况如表2.1所示。表2.1 Dj ango对Python版本的支持情况Django versionPython versions2.7,3.2 (until the end of 2016),3.3,3.4,3.51.81.9,1.102.7,3.4,3.51.112.7,3.4,3.5,3.62.03.5+2.1 Django开发环境

Django的版本大致分为三种:第一种是长时期支持版本(Long Term Support,简称LTS);第二种是正式发布的稳定版本;第三种是预览版(一般版本号中带a1、a2、b1、b2的标识),主要为愿意尝试新功能的用户使用。2.1.1 在Windows下安装Django

Django官方网站:https://www.djangoproject.com/

Python官方仓库下载地址:https://pypi.python.org/pypi/Django

在开始安装Django之前,不得不事先说明,Django是一个更新非常频繁的Web框架,每个版本之间或多或少都会有些差异,这些差异可能会给初学者造成困惑。我在编写本书时已选用了最新的版本Django1.10.3,但当你拿到本书时,Django也许已经更新了很多版。所以如果你是初学者,最好让Django的版本与本书中的保持一致。

Django的安装同样符合第1.3节所介绍的几种安装方式。官方网站建议使用pip命令来安装Django。cmd.exe> pip install django==1.10.3 …… 或者: > pip3 install django==1.10.3 …… 或者: > python3 -m pip install django==1.10.3 …… 或者: > pip install -i https://pypi.douban.com/simple/ django=1.10.3 ……

上面的四行命令,任意一行都可以成功地安装Django。如果只安装一个版本的Python,那么第一个命令即可成功安装Django,第二、三行命令是在你同时安装了Python的两个版本的情况下,用于区分Python 2时使用的。第四行命令是通过指定豆瓣源来安装Django。2.1.2 在Ubuntu下安装Django

Linux操作系统的版本有很多,这里以流行的Ubuntu系统为例。

因为Ubuntu系统本身对Python有很强的依赖,所以Ubuntu自带的就有Python。而且新的Ubuntu系统同时集成了Python 2与Python 3,打开终端,输入“python”或“Python3”命令回车,分别进入两个版本的Python Shell模式。ubuntu终端fnngj@ubuntu:~$ python # Python2 Python 2.7.11+ (default, Apr 17 2016, 14:00:29) [GCC 5.3.1 20160413] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> quit() #退出Python fnngj@ubuntu:~$ python3 # Python3 Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on linux Type "help", "copyright", "credits" or "license" for more information. >>>

在Ubuntu下,Django的安装方法与在Windows中基本一样,这里不再说明。在Linux下开发Django同样是个不错的选择,所以,本书中的所有开发与测试代码同样可以在Linux下正常运行。2.2 开始第一个demo

按照惯例,应该先介绍一下什么是Web框架,以及Django的特性和架构。但对于新手来说,灌输这些概念并不能使我们真正了解Django,所以,先通过一个简单的demo来体会Django是如何工作的。

我们要开发一个什么样的应用?

开发一个什么样的应用才能很好地涵盖到我想要在本书中所要讲解的知识点呢?我花了很长时间来思考这个问题。作为一名多年来一直从事软件测试工作的人员来说,并没有多少项目开发的经验,Django的相关资料中的一些项目对于我要介绍的知识点来说也并不太合适。偶然想起前段时间所测试的一个发布会签到系统(该系统由PHP语言开发),我尝试着用Django开发了一个简单的版本,基本可以涵盖本书所介绍的技术。嗯,就它了!下面和我一起来完成这样一个项目吧。2.2.1 创建项目与应用

如果你已经成功安装Django,那么在.../python35/Scripts/目录中将会多出一个django-admin.exe可执行文件。在Windows命令提示符下输入“django-admin”命令回车。cmd.exe> django-admin Type 'django-admin help ' for help on a specific subcommand. Available subcommands: [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate runserver sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver

这里罗列了Django所提供的命令,其中使用“startproject”命令来创建项目。cmd.exe> django-admin startproject guest #创建guest项目

将该项目命名为“guest”。项目结构如下:guest/ ├── guest/ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py

guest/__init__.py:一个空的文件,用它标识一个目录为Python的标准包。

guest/settings.py:Django项目的配置文件,包括Django模块应用配置、数据库配置、模板配置等。

guest/urls.py:Django项目的URL声明。

guest/wsgi.py:与WSGI兼容的Web服务器为你的项目提供服务的入口点。

manage.py:一个命令行工具,可以让你在使用Django项目时以不同的方式进行交互。cmd.exe> cd guest # 进入guest项目 \guest> python3 manage.py # 查看manage所提供的命令 Type 'manage.py help ' for help on a specific subcommand. Available subcommands: [auth] changepassword createsuperuser [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver [sessions] clearsessions [staticfiles] collectstatic findstatic runserver

manage.py所提供的许多命令都与django-admin相同。如果想进一步了解它们的作用与区别,可以查看Django的官方文档。

https://docs.djangoproject.com/en/1.10/ref/django-admin/

对于新手来说,暂时不需要弄清楚这其中的每一个细节,你只需跟着我一步一步操作即可,等到我们对Django开发有了一定的了解后,再回头来对这些细节追根问底。

接下来,使用“startapp”命令创建应用。一个项目可以包含多个应用,而我们要开发的签到系统需要在具体应用下完成。cmd.exe\guest> python3 manage.py startapp sign #创建sign应用

创建“sign”应用。

Django应用的目录结构(通过PyCharm开发工具截图)如图2.1所示。图2.1 Django应用目录

migrations/:用于记录models中数据的变更。

admin.py:映射models中的数据到Django自带的admin后台。

apps.py:用于应用程序的配置,在新的Django版本中新增文件。

models.py:Django的模型文件,创建应用程序数据表模型(对应数据库的相关操作)。

tests.py:创建Django测试用例。

views.py:Django的视图文件,控制向前端页面显示的内容。2.2.2 运行项目

Django提供了Web容器,通过“runserver”命令就可以把项目运行起来。cmd.exe\guest> python3 manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. December 06, 2016 - 22:23:02 Django version 1.10.3, using settings 'guest.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

Django默认通过本机的8000端口来启动项目。打开浏览器,访问:http://127.0.0.1:8000/,如图2.2所示。图2.2 Django默认页面

如果可以在浏览器中看到图2.2所示页面,那么说明Django已经可以工作了。

如果你的当前环境8000端口号被占用了,那么也可以在启动时指定IP地址和端口号。cmd.exe\guest> python3 manage.py runserver 127.0.0.1:8001 ……

其中“127.0.0.1”为指向本机的IP地址,“8001”为设置的端口号。2.2.3 Hello Django!

大多编程语言的教程,第一个例子总是会教你如何打印“Hello xxx!”,我们也不免俗套,接下来跟着我在Web页面上打印“Hello Django!”。

在此之前,我们首先需要配置一下guest/settings.py文件,将sign应用添加到项目中。setting.py…… # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'sign', ] ……

计划通过/index/路径来显示“Hello Django!”。在浏览器地址栏输入:http://127.0.0.1:8001/index/,如图2.3所示。图2.3 Django默认页面

显然,访问的路径并不存在,如图2.3所示,Django提示“Page not found(404)”,不要害怕!这并不是一个严重的错误,只是因为访问了一个不存在的路径而已,认真读一下页面上的提示,将会得到不少有用信息:● Django在项目的guest子目录下通过urls.py文件来定义URLconf。● 但是,在urls.py文件中只找到了一个admin/路径的路由配置。● 当前URL和index/并没有匹配到。

根据Django的提示,打开../guest/urls.py文件,添加/index/的路由配置。urls.py…… from django.conf.urls import url from django.contrib import admin from sign import views #导入sign应用views文件 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/$', views.index), #添加index/路径配置 ]

重新启动项目。cmd.exe\guest>python3 manage.py runserver Performing system checks... …… File "D:\pydj\guest\guest\urls.py", line 22, in url(r'^index/$', views.index), AttributeError: module 'sign.views' has no attribute 'index'

等等!这次项目在启动时就出错了!提示在views.py文件中没有index属性,确实如此。接下来打开../sign/views.py文件,创建index函数。views.pyfrom django.http import HttpResponse # Create your views here. def index(request): return HttpResponse("Hello Django!")

定义index函数,并通过HttpResponse类向客户端(浏览器)返回字符串“Hello Django!”。

HttpResponse类在django.http.HttpResponse中,以字符串的形式传递给客户端。

如图2.4所示,页面成功出现了“Hello Django!”。开心一下吧,你的第一个Django程序已经成功了。图2.4 Hello Django!2.2.4 使用模板

现在通过HTML页面来替代“Hello Django!”字符串,那么处理方式也会有所不同,我们可以认为这是一次重构。

在应用sign/目录下创建templates/index.html文件。(Django默认查找templates/目录下的HTML文件,不要随便命名该目录名!)index.html Django Page

Hello Django!

关于HTML(超文本标记语言)的使用,请读者参考其他资料学习。修改视图文件views.py中的index函数。views.pyfrom django.shortcuts import render # Create your views here. def index(request): return render(request,"index.html")

这里抛弃HttpResponse类,转而使用Django的render函数。request为请求对象,“index.html”为返回给客户端的HTML页面。

再次刷新浏览器,查看index.html中所展示的内容。2.3 Django工作流

通过前面的简单例子,相信你对用Django开发Web项目已经有了一个初步的印象。下面用一张图来总结一下上面例子中Django的处理流程,如图2.5所示。图2.5 Django处理流程

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载