

英语原文共 494 页,剩余内容已隐藏,支付完成后下载完整资料
第七章 web开发
分享很重要
教练在他的笔记本电脑上面运行了你的程序,并且展示给我们看。
什么时候我和我的朋友们也能访问我们的时间列表呢?
我非常希望能给我的父亲看看。
你要为你的成功付出代价
就在凯里教练展示了你的最新程序之后,新的请求潮水般涌来。看起来所有人都想访问你的数据。
问题在于:要做到这一点,“最好的办法”是什么?
可以把你的程序放在Web上面
你想与很多人分享你提供的功能。
不过可能你希望所有人访问你的程序时,都只会访问到同一个版本。
而且你要确保能够容易对程序进行更新。
你要做的正是Web应用
如果将程序开发成一个基于Web的应用,或者简称为Web应用(WebApp),你的程序会有以下几个特点:
·能够访问你的网站的每一个人都可以使用程序
·位于Web服务器上的某个位置
·需要新功能时很容易更新
不过,究竟Web程序怎样工作呢?
Web应用特写
不论你在Web上面做什么,都离不开请求和响应。Web请求作为某个用户交互的结果由Web浏览器发送到Web服务器。在Web服务器上面,会生成Web响应(或者应答)并且发送回Web浏览器。整个过程可以总结为5个步骤。
第一步:用户在他选择的Web浏览器中输入一个Web地址,选择一个超级链接,点击一个按钮。
第二步:Web浏览器将用户的动作转换成一个Web请求,并且通过互联网将它发送到一个服务器。
第三步:Web服务器收到Web请求,必须决定接下来做什么。
第四步:Web服务器处理Web请求,创建一个Web响应,这会通过互联网发发回给等待着的Web浏览器。
第四步可能有很多子步骤
实际上,第四步可能包括很多子步骤,这要看Web服务器如何生成响应。显然,如果服务器要做的只是找到静态内容并且将它发回给浏览器,这么些子步骤不会太费劲。因为这些都只是文件I/O而已。
不过,如果必须生成动态内容,就要包括以下子步骤,Web服务器要找到所需要执行的程序,执行找到的程序,然后捕获程序的输出作为Web响应。再把它发回给还在等待的Web服务器。
早在Web发展的初期,这个生成动态内容的过程就是已经得到标准化,称为通用网关接口。符合这个标准的程序通常称为CGI脚本.
第五步:Web浏览器接收到Web响应,并且显示在用户的屏幕上。
决定接下来做什么
这里可能发生两种情况,如果Web请求所请求的是静态内容,比如一个HTML文件,图像或者存储在Web服务器硬盘上面的其他任何内容,Web服务器会找到这个资源,并且把它当做一个Web响应返回给Web浏览器。
如果请求的是动态内容,也就是说,内容必须动态生成,那么Web服务器会运行一个程序来生成Web响应。
Web应用需要做什么
下面花费一些时间来考虑你希望你的Web应用看上去是什么样子的,另外在用户的Web浏览器上面应该有怎样的表现。然后可以利用这个信息来帮助你确定你的Web应用需要做什么。
采用MVC设计Web应用
既然已经知道你的Web应用需要你提供哪些页面,你肯定会提出下一个问题,建议这些页面的最佳方法是什么。
如果你向10个Web开发人员提出这个问题,你会得到10个完全不同的答案。具体答案是什么往往需要看你问的是谁。
尽管如此,还是有一个普遍的共识,这就是,好的Web应用应当遵循 模型-视图-控制器 模式,这有助于将Web应用的代码分解为易于管理的功能模块或者组件。
模型:存储Web应用数据的代码
视图:格式化和显示Web应用用户界面的代码
控制器:将Web应用黏合在一起并且提供业务逻辑的代码
通过遵循MVC模式。可以合理建构你的Web应用,从而当出现新的需求时能够轻松扩展。另外还可以将工作分摊给多个人共同完成,每个人分别负责一个组件。
下面来为你的Web应用构建各个MVC组件。
为数据建模
您的web服务器需要存储数据的一个副本,在这个例子中是教练凯利的时间值(在他的文本文件中开始)。
当你的应用开始运行,文本文件中的数据需要转换成AthleteList对象实例,存储在字典中(通过运动员的名字索引),然后保存为pickle文件。让我们把这个功能命名为为put_to_store()新函数。
当你的应用运行时,pickle中的数据需要提供给你的应用作为一个字典。让我们把这个功能构建成另一个新函数叫get_from_store()。
查看界面
随着你的模型代码完成并且工作,是时候看看你的视图代码,这将创建你的应用用户界面(UI)。
在网络上,一般使用HTML创建UI,网页的标记技术。如果您是新学HTML,值得花些时间来熟悉这个关键的web开发技术。在网上有很多材料和不少好书。
YATE: 另外一个模板引擎
你的朋友在代码评审团队听到你计划写一些代码来生成HTML应用的UI。他们已经发送一些代码给你,并且发誓这些将会使你的生活更容易。
这是一个小图书馆HTML生成助手函数名为yate。产生的代码很快,并且“扔掉”最近的代码。所以他们的团队提供这样的代码。有些原始,但它应该是好的。
控制你的代码
你的模型代码已经准备好了,你有一个关于yate模块可以帮助您的视图代码的好主意。是时候将它们用一些控制器代码粘在一起了。
首先,你需要安排你的web-app目录结构来帮助整理。老实说,这里发生的一切,都要好好的思考一下。随着时间的推移,你可以通过拓展你的webapp来加强你的能力。
这儿有一个我们实验室推荐的文件夹结构。
CGI能够让你的Web服务器运行程序
通用网关接口(CGI)是一种互联网标准,允许web服务器运行一个服务器端程序,称为一个CGI脚本。
一般来说,CGI脚本放置在一个特殊的文件夹目录,所以web服务器知道在哪里可以找到他们。在一些操作系统(尤其是unix形式系统),CGI脚本必须设置为可执行文件,这样web服务器才可以处理web请求时执行它们。
所有webapp 都需要在web服务器上运行。
地球上几乎每一个web服务器支持CGI。不管你运行Apache,IIS,nginx,Lighttpd,或任何其他服务,他们所有支持运行用Python编写的CGI脚本。
但是使用这些工具之一是没有必要的。没有教练会同意下载、解压、安装、配置、和管理这些庞大的工具之一。
幸运的是, Python附带自己的web服务器,包含在http.server模块中。检查网络应用的内容,它有一个支持CGI的web服务器,称为simplehttpd.py。
显示选手列表
让我们创建一个名为generate_list.py 的脚本,当由web服务器执行时,会动态生成一个HTML web页面如下:
当用户选择一个运动员,并通过点击单选按钮且单击选择,一个新的web请求被发送到web服务器。这个新的web请求包含单选按钮被按下的数据,以及一个CGI的名字(表单的数据发送到这个脚本)。
回想一下,你所有的CGI脚本都需要放置在您的web服务器目录文件夹中。有鉴于此,我们要确保你的generate_list.py CGI脚本将其数据发送到另一个叫做:cgi_bin/ generate_timing_data.py的项目中。
创建另外一个CGI脚本
让我们回忆一下generate_timing_data.py CGI脚本所做的事情。基于你的手绘草图,您需要生成一个新的HTML页面,包含了选择的运动员的前三个时间:
但是如何知道哪一个运动员被选定呢
当你点击一个单选按钮,然后按下选择按钮,一个新的web请求发送到服务器。web请求标识CGI脚本执行(在这种情况下,这是generate_timing_data.py)在一起表单的数据。web服务器安排为你发送表单的数据CGI脚本作为输入。在您的代码中,您可以访问表单数据使用Python的cgi模块,这是标准库的一部分。
使用CGI追踪来解决错误
CGI标准规定服务器端程序(CGI脚本)生成的任何输出都会由web服务器捕获并且发送到等待的web浏览器。具体地说,捕捉任何发送到STDOUT(标准输出)的内容。
当你的CGI脚本产生一个异常, Python安排错误信息显示在STDERR(标准错误输出)上。CGI机制会忽略这个输出,因为他要的是CGI脚本的标准输出。
当应用部署好后,这种行为很好,但如果不是就不一样了。如果在浏览器窗口看到异常的细节,而不必不断地跳转到web服务器的日志屏幕,这会很有用。
嗯hellip;你猜怎么着?Python的标准库附带了一个CGI跟踪模块(称为cgitb),启用时,它会安排详细的错误消息出现在您的web浏览器中。这些信息可以帮助你发现你的CGI在哪里已经错了。当你定位错误并且使你的CGI运行良好,只需关掉CGI跟踪:
一个小小的改变能够造成所有的改变
CGI的跟踪输出显示出一个从AthleteList代码中错误使用top3()的方法。
一个快速的代码审查,以AthleteList类发现的来源错误:top3()方法已被改为一个类属性。
使用 @property装饰允许top3()方法像一个属性。所以,不应该这样调用top3()方法:
把top3()方法看做是另一个类属性,并这样调用它:
这是一个小小的改变,但是他很重要
当改变一个类的使用方法,你需要小心考虑改变对现有程序会有什么影响。
此刻,你是唯一一个使用AthleteList类的,所以它要解决此问题没什么大不了的。但想象一下如果成千上万的程序员使用和依赖你的代码。
让我们修改你的CGI脚本并且重试一次。
你的Web应用好极了
通过移动Web程序,教练凯利不仅可以简单地与他的运动员分享数据。而且可以和任何需要访问自己数据的人共享。
通过遵循MVC模式和使用CGI,您已经构建了一个应用,这样很容易根据新的需求扩展你的应用。
恭喜你成为一个Web开发者
第八章 小型设备
把你的数据在网络上开辟了所有类型的可能性。
不仅可以从任何地方任何人与你的应用,但他们越来越多这样做从一组不同的计算设备:电脑、笔记本电脑、平板电脑、掌上电脑,甚至是手机。而且不只是人类与你的应用交互你必须支持和担心:机器人是小程序,可以自动化网络交互和通常希望自己的数据,而不是你的人性化的HTML。在这一章,你利用Python教练凯利的手机写与你交互的应用程序应用的数据。
世界正变得越来越小
教练凯利继续每天使用他的webapp,但是他的新智能手机有点问题。
我能通过Wi-Fi在我的手机上面显示我的时间数据,但它是如此之小以致几乎不可读,更不用说点击链接或按钮。可以你帮我看一看吗?我要冲刺了,早餐之前我还有另外一个5Khellip;
有更多的设备,不仅仅是台式电脑。
谁知道你的用户会不会尝试使用笔记本电脑或者台式电脑之外的设备使用你的应用呢?
这是一个不同的计算环境。
教练凯利在Android上面
教练有一个可爱的运行谷歌Android智能手机操作系统的新手机。果然,当你检查一下,你会发现webapp太小并且无法在教练的3英寸显示屏上面使用。
显然,教练需要在他的手机上面访问数据和运行应用hellip;但是如果不使用手机的浏览器的话,最好的方法是什么呢?
在教练的智能手机上运行Python
一个快速的Web搜索会揭示一个愉快的惊喜:Python能够运行在Android。
至少有一个版本的Python运行在Android。一个叫做SL4A的项目提
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[146416],资料为PDF文档或Word文档,PDF文档可免费转换为Word
