软件开发者杂志,CPOL,年10月29日
学习Django和Tornado这篇文章的作者是MichalDAgosta,也首次被发表在软件开发者杂志的第08期中。你可以在软件开发者杂志上找到更多文章。
前言很久之前,随处可见的是把“服务端页面”放到一起,并将它们和一个数据库连接起来,然后你的网站就出来了。而如今的网页是复杂的、动态的,同时也占用很多基础设施以便让一个网站能长久地在因特网上活跃。新云的是没有人再去从头到尾写这些页面了,因为在很多程序语言里已经提供了很多框架让你建立一个网站。
网页框架的目的就是提供普遍的特性,以便它们能被所有应用所使用。模型-视图-控制器(MVC)模式就是这样一个架构标准用以开发网页应用,因此,框架通常提供了某些数据支持(模型部分M)的形式,URL处理(控制器部分C)以及HTML模板(用户视图部分V)。在这篇文章中,我将介绍Python中的两个网页框架,Django和Tornado。虽然这两个框架都提供了MVC结构,但是他们彼此在MVC上是有相对立的特性。
Django的特性如果你和大部分人或者公司那样,你会想要从你的用户那里收集信息并存储到一个数据库里面。那么这就是Django真正能解决的所在。Django有一个表格生成器,它能让用户按照数据库字段来定义你的表格,然后生成html页面给你,并能验证用户在POST提交时的数据。Django的地道的数据模型读取你的数据库结构,或者也为你创建一个数据库结构,并可以和软件对象那样为你生成代码以便定义你的数据库结构。然后,你可以读取和设定属性,然后基于过滤器来查询,以及按照类的层级结构那样的对象来考虑你的SQL数据。不过,这个系统的弱点是难以样式化,如果你有一些列的图形设计目的。
模板系统提供了MVC的用户视图V部分。你可以给html模板设定一些变量,这些模板是独立于Python代码的,且这些模板的值也会在运行的时候被替代。这在如今是很标准的做法了,而且Django还能做更多。你可以遍历所有课迭代的对象,比如列表和字典,以及调用函数。对于定义标准网页头和网页脚的时候,模板继承也是一个简单但很强大的方法,和其他特性一样,他们在每一个页面都有。模板化不是网页最快的部分,所以你需要计划好额外的处理时间。
由于Django是如此成熟,它还有其他一些特性,比如:用户认证,本地化,uncod处理。这些特性还在继续增加。如果你想要一个能满足你所有可能的需要的框架,同时你还没有时间或者技能去完成那些所需要的,那么Django就是你所需要的了。正如所描述的,Django是给那些有着工作进程期限的完美主义者而使用的网页框架。
Tornado的特性Tornado可能是最轻而最严格的,全Python框架。它小而快地处理MVC框架的基本操作。越小也就是越简单,因此你很容易扩展这个框架本身,并直接管理你的网站的基本操作,比如HTTP处理,请求参数的处理。它有类似于Django的url路由功能,但是使用了独立的类来接受各个请求。这就有可能为你的请求来创建类结构,因此你可以把一些类的页面都黏在一起成为一个单一的父级“流”。如果对此有更加精细的了解,你可以做得好。
数据库的连接不再是默认的内建的功能了,但是依然可以在一个叫做torndb的包里面找到。有了这个,你可以马上连接你的MySQL并提交你的请求了。没什么别的但就是可以用了。返回的对象就类似一个字典,很多人认为没有更简单的了。你可以创建你自己的系统用来管理连接和尝试测试请求,因此,在Tornado里面,这是第一个你要额外做一些工作的地方,而且他也正如你想要的那样来运作。
Tornado里的模板语法很想Django的语法,也很大程度上是可互换的:有模板继承,变量绑定,循环和本地化支持。但是Tornado需要很少代码就可以运行更快。你可以为了提速而简化模板编译,通过小心地指明那些文件是不一定要包含的。这是Tornado让你有很大便利地接触系统内部,且让它做你想要它做的一个极好的例子。本地化和unicod支持也是很完整的---你可以创建csv那样的键/值对文件,然后根据浏览器语言头来搜索那些值。只要你以一种开放的方式设计了你的系统,那么你可以让你的网站支持多语言和快速运行。
真正的区分度在于Tornado的读写循环(IOLoop),这是一个异步的软件库,它直接整合了内核EPoll,KQuu和类似的设施。大家熟知的事件循环(EvntLoop)这样的编程方式允许你的程序可以脱离它的流控制,所以在你等待内核脱离你的事件的时候,系统可以响应其他网页请求。这有些像TwistdRactor和Nod.js,它们都是基于事件循环的而不是为每个请求都分流一个新的进程。当你在做别的操作,比如Oauth、发帖子、创建一个API调用或者处理一个网页的时候,你可以让用户的请求“挂断”。为了说明这个异步特征,Tornado做了一个网页聊天系统,这个系统只运行一个进程而且还是代码样例遵守的基础。
通过写程序来写代码由于你在审视比较网页框架,我假设你能够安装Python以及工具包,能够编辑源代码并运行它。这么说吧,学习编程的最好的方式是通过练习和一步步按照例子来做。不多说了,让我们开始写点代码吧!我已经把那些说明各系统的特征的某些例子都发到了github上(白癜风如何治疗最好白颠风