Python语言基础、
Tornado Web开发基础、
开发动态Tornado Web程序、
开发异步Web程序、构建安全的Tornado Web
Django Web开发基础、
Django数据库操作、
Django典型应用开发实战、
Django高级开发实战、
Flask Web开发基础、
使用Flask模板、
实现表单操作、
Flask数据库操作、
Flask高级实战和在线博客+商城系统。
Python是一门面向对象的程序开发语言(Object-Oriented Language, OOL),其功能比较强大,能够开发桌面程序、Web程序、爬虫程序、大数据程序和人工智能程序等。
Tornado Web开发基础
Tornado是一个著名的Python Web开发框架,能够帮助Python开发者迅速开发出功能强大的Web程序。Tornado充分利用了非阻塞式服务器环境,并且提供了一些常用的Web开发工具和优化策略,为高效开发Web程序创造了良好的条件。
Tornado框架基础
Tornado框架的诞生和发展历程要从FriendFeed说起。FriendFeed是一个著名的社交聚合网站,其创始人是保罗·布克海特(Paul Buchheit)。2009年,FriendFeed被Facebook收购。2009年9月,Facebook发布了开源网络服务器框架Tornado, Tornado由Facebook收购的社交聚合网站FriendFeed的实时信息服务演变而来。Tornado十分追求Web程序的性能,Facebook的目标是将Tornado打造成一个高性能的Web服务器框架。Tornado还拥有处理安全性、用户验证、社交网络以及与外部服务(如数据库和网站API)进行异步交互的工具。具体来说,Tornado框架的主要特点如下所述。
非阻塞式服务器:非阻塞式的最大特点是不管程序是否执行成功,都会立即向客户端返回结果,这样做的好处是提高用户体验。
运行速度快:因为Tornado框架支持多线程操作,所以运行速度和响应速度极快。
• 支持并发操作:能够在不影响用户体验的前提下,同时打开上千甚至上万条连接
• 支持WebSocket连接:因为Tornado和市面上的大多数Web服务器和操作系统一样,都支持WebSocket功能,所以Tornado框架可以跟大多数操作系统实现无缝对接。在现实应用中,通常将Tornado框架分为如下所述的4个部分。
• tornado.Web:创建Web应用程序的Web框架。
• HTTPServer和AsyncHTTPClient:处理HTTP请求,实现HTTP服务器与异步客户端功能。
• IOLoop和IOStream:在里面保存了实现异步网络功能的类库,这是Tornado实现高并发的基础。
• tornado.gen:一个基于Generator(生成器)实现的异步开发接口库,可以使用同步方式编写异步处理代码,大大提高了开发效率。
编写第一个Tornado程序
一个基本的Tornado框架程序在Tornado框架中,通过继承类tornado.Web.RequestHandler的方式编写Web服务器端程序,在这个过程中需要编写业务方法get()和post(),通过这两个业务方法可以对客户端URL中传递来的GET请求和POST请求做出回应。下面的实例文件app.py演示了使用Python编写一个简易Tornado框架程序的过程。
- 导入Tornado框架中的相关模块tornado.ioloop和tornado.web。
- 自定义响应URL请求的业务方法get(self)。
- 在方法make_app()中实例化Tornado模块中提供的Application类,并定义URL映射列表及有关参数。
- 设置Tornado的端口为8888,然后使用方法start()启动Tornado服务器。
在命令提示符下的对应子目录中执行:
在浏览器地址栏中输入http://localhost:8888,就可以访问Tornado服务器,查看这个网页默认的执行效果。在浏览器中的执行效果如图2-2所示。
通过上述实例可以看出,在使用Tornado框架编写服务器端程序时,首先需要编写业务处理类,并将它们和某一特定的URL映射起来,Tornado框架服务器收到对应的URL请求后可以调用业务处理类。在此建议读者,如果是比较简单的网站项目,可以把所有的代码放入同一个模块中。但是为了提高项目开发的规范性,可以按照功能将其划分到不同的模块中。在现实应用中,TornadoWeb项目的通用目录结构如下所示。
为了提高项目开发的规范性,可以按照功能将其划分到不同的模块中。在现实应用中,TornadoWeb项目的通用目录结构如下所示。
2.2.2 获取请求参数在Web应用程序中,客户端的浏览用户通常需要获取3种参数,分别是URL中的参数、GET中的参数和POST中的参数。在接下来的内容中,将详细讲解获取上述3种参数的知识。(1)获取URL中的参数在TornadoWeb程序中,要想获取URL中包含的参数,需要定位到URL定义中的参数,并根据这个参数在对应的业务方法中找出相应的参数名。也就是说,URL中的参数和业务方法中的参数是对应的。在Tornado框架中,使用正则表达式来匹配业务方法参数和URL中的参数,比如:[插图]通过上述代码,URL字符串定义可以接受形如id/后跟一位或多位数字的客户端URL请求。针对上面的URL定义,可以通过如下代码定义对应的方法get():
如果此时传递过来匹配的URL请求,会截取跟正则表达式匹配的URL部分并传递给方法get(),这样可以把数据传递给id变量,以便可以在方法get()中获取并使用。下面的实例文件can.py演示了在方法get()中获取URL中参数的过程。源码路径:daima\2\2-2\can.py
2.2.2 获取请求参数在Web应用程序中,客户端的浏览用户通常需要获取3种参数,分别是URL中的参数、GET中的参数和POST中的参数。在接下来的内容中,将详细讲解获取上述3种参数的知识。(1)获取URL中的参数在TornadoWeb程序中,要想获取URL中包含的参数,需要定位到URL定义中的参数,并根据这个参数在对应的业务方法中找出相应的参数名。也就是说,URL中的参数和业务方法中的参数是对应的。在Tornado框架中,使用正则表达式来匹配业务方法参数和URL中的参数,比如:[插图]通过上述代码,URL字符串定义可以接受形如id/后跟一位或多位数字的客户端URL请求。针对上 面的URL定义,可以通过如下代码定义对应的方法get():
如果此时传递过来匹配的URL请求,会截取跟正则表达式匹配的URL部分并传递给方法get(),这样可以把数据传递给id变量,以便可以在方法get()中获取并使用。下面的实例文件can.py演示了在方法get()中获取URL中参数的过程。源码路径:daima\2\2-2\can.py
在上述代码中,使用正则表达式定义了URL和类成员zi的关系,使用方法get()获取了URL参数中的id。例如,在浏览器中输入http://localhost:8888/0001的执行效果如图2-3所示。
(2)获取GET和POST中的参数Tornado框架中,在获取GET或POST请求中的参数时,需要调用从类RequestHandler中继承来的方法get_argument()。方法get_argument()的原型如下所示。
方法get_argument()中各个参数的具体说明如下所述。
• name:在URL请求中的参数名称。
• default:当没有参数时设置一个默认值。
• strip:设置是否删除获取的参数中首尾两头的空格。
下面的实例文件po.py演示了获取POST请求中的参数的过程。源码路径:daima\2\2-2\po.py
对上述代码的具体说明如下所述。
• 当服务器收到GET请求时,返回在html_txt中定义的表单页面。
• 当用户在表单中输入自己的工作单位并单击“发送POST请求”按钮时,通过方法post()将用户输入的表单数据以POST参数的形式发送到服务器端。
• 在服务器端通过方法get_argument()获取打印输出的内容,通过方法write()显示提示信息。在浏览器中输入http://localhost:8888/get的执行效果如图2-4所示。在表单中输入工作单位“玄武纪”,然后单击“发送POST请求”按钮,执行效果如图2-5所示。
使用CookieCookie,有时经常使用其复数形式Cookies,是在计算机Web应用中的一个常见概念,用于在客户端通过单独的文件来保存用户的信息。在现实应用中,很多网站服务器使用Cookie来保存会员的账号信息,然后通过保存的Cookie信息来判断当前用户是否登录Web。例如,京东、天猫、当当等网站,都是使用Cookie来保存会员的账号信息。除此之外,Cookie的另一个重要应用场合是“购物车”,用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookie,以便在最后付款时提取信息。在计算机系统中,Cookie以键值对的形式保存,如key=value。在Tornado框架中,提供了直接操纵Cookie和实现安全Cookie的方法。安全的Cookie是指存储在客户端的Cookie是经过加密的,在客户端只能看到加密后的数据。在Tornado框架中,使用Cookie和安全Cookie的常用方法原型如下所述。
• set_cookie('name',value):设置一个新的Cookie值,name表示名字,value表示值。• get_cookie('name'):获取名字为name的Cookie值。
• set_secure_cookie ('name',value):设置一个安全的Cookie值,name表示名字,value表示值。
• get_secure_cookie('name'):获取名字为name的一个安全的Cookie值。
• clear_cookie('name'):删除名字为name的Cookie值。
• clear_all_cookies():清除所有Cookie。
实现URL转向
在Web程序中,URL转向是指通过服务器的特殊设置,将访问当前域名的用户引导到设置的另一个URL页面。例如,有一个复杂IP地址的页面不利于人们快速访问,此时可以考虑申请一个简洁并且易于记住的域名,然后将域名和整个页面的IP地址进行绑定。这样访问者只需输入简洁的域名即可访问这个具有IP地址的页面。上面介绍的绑定过程就是URL转向,有时也被称为跳转。
UI模块介绍
在Tornado框架中,UI模块封装了模板中包含的HTML、CSS和JS的可复用组件。通过使用UI模块定义的元素,可以处理在多个模板交叉复用或在同一个模板中重复使用的内容。在Tornado中,模块是一个继承自类Tornado.UIModule的Python类,使用方法render()搭建模板和Python类之间的桥梁。当在模板中使用如下标签引用一个模块时,Tornado的模板引擎会调用模块的方法render()进行URL导航,然后将处理结果返回为一个字符串来替换模板中的模块标签。