tornado 学习笔记2 Python web主流框架
2.1 Django
官方网址:https://www.djangoproject.com/
简介:Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.Django是高等级的Web 框架,支持快速开发及简单、程序化的设计。Django是由一群经验丰富的开发者创建,关注Web开发中的麻烦事,这样开发者就可以集中精力写自己的应用,而不用去重复造轮子。Django是免费而且开源的。
特点:
- l Ridiculously fast极快,快的离谱,快的荒唐。帮助开发者快速搭建往网站。
- l Fully loaded.Django包含几十个额外的模块,这些模块可以用来处理一些通用的Web开发任务。这些模块包括用户验证、内容管理、网站站点、RSS订阅等
- l Reassuringly secure 倡导安全。Django把安全看的很重,而且能帮助开发者避免许多常见安全错误,比如SQL注入,脚本跨域、伪造的跨域请求、ClickJacking(点击劫持)。
- l Exceedingly scalable 极度可扩展性.一些访问量很大的网站使用Django的扩展能力来满足巨大的高峰访问量的需求。
- l Incredibly versatile 难以置信的全能型。公司、机构和政府部门已经使用Django来构建各种各样的事情,从内容管理系统到社交网站再到科学计算平台。
Django的缺点:
- · 系统紧耦合,如果你觉得 Django 内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的 ORM、Template。要在 Django 里用 SQLAlchemy 或 Mako 几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。
- · Django 自带的 ORM 远不如 SQLAlchemy 强大,除了在 Django 这一亩三分地,SQLAlchemy 是 Python 世界里事实上的 ORM 标准,其它框架都支持 SQLAlchemy 了,唯独 Django 仍然坚持自己的那一套。Django 的开发人员对 SQLAlchemy 的支持也是有过讨论和尝试的,不过最终还是放弃了,估计是代价太高且跟 Django 其它的模块很难合到一块。
- · Template 功能比较弱,不能插入 Python 代码,要写复杂一点的逻辑需要另外用 Python 实现 Tag 或 Filter。
- · 让人纠结的 auth 模块,Django 的 auth 跟其它模块结合紧密,功能也挺强的,就是做的有点过了,用户的数据库 schema 都给你定好了,这样问题就来了,比如很多网站要求 email 地址唯一,可 schema 里这个字段的值不是唯一的,纠结是必须的了。
- · 核心开发团队似乎比较顽固,除了说第三方库难使用,据说历史上 ORM API 繁琐(后来按 ActiveRecord 风格重写),曾经对 ajax 热潮也不怎么当回事。
- · 周边资源不够发达,其实说来说去有些相关,这个是第三方库比较难融合相关的,没有很好的插件体系。虽然官方文档还不错,但是相关书籍很资料相比 rails 等并不多。
- · 早前有说没有结合测试框架,最新的 1.5 肯定是有了。不过个人判断又是反应迟钝的一个表现。不过个人也不喜欢测试太重,这点跟作者想法比较一致。
Django的优点:
- · 自助管理后台,admin interface 是Django 里比较吸引眼球的一项 contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。
- · 虽然 Django 自带的 ORM 不如 SQLAlchemy 强大,但也不弱。一般来说可以不怎么使用 SQL 语句,每条记录都是一个对象,而取对象的关联,易如反掌。
- · URL design,Django 的 url 模块设计得看似很复杂,都是使用正则表达式,但真正用到的都是很简单的正则,等你用到一定程度的时候,发现这块东西,做的很细致,地址的表达上,你可以随心所欲,那些优美的,简洁的,专业的地址,不管哪种,你都能表现出来。
- · Django 的 App 理念很好。App 可插拔,是不可多得的思想。不需要了,可以直接删除,对系统影响不大。
- · Django 的错误提示做的足够详细了,我有时喜欢上 Django 的出错页面了,那页面先不说有多详细,但光页面的美观上就是一种享受。有时,Django 的错误提示信息,让你马上就能知道在那个页面哪行代码出错了。
- Django 大包大揽,用它来快速开发一些 Web 应用是不错的。如果你顺着 Django的设计哲学来,你会觉得 Django 很好用,越用越顺手;相反,你如果不能融入或接受 Django 的设计哲学,你用 Django 一定会很痛苦,趁早放弃的好。所以说在有些人眼里 Django 无异于仙丹, 但对有一些人来说它又是毒药且剧毒。
- 现在市面上用Django的公司很多,但是我不是很喜欢大而全的框架,什么功能都包括,什么事都做,其实大部分的开发公司只需要其中的核心功能,其他额外的功能基本没用上,有点大材小用。而且,这么大的框架学习起来容易让人产生恐惧感,融合度太高反而限制了扩展及维护。
2.2 Flask
相关资源: 书籍《基于Python的Web应用开发实战》。
Flask是Python web开发中的微小框架(mirco framework),简称“微框架”,具有当下比较流行的概念—“微”。Flask 非常小,因此你一旦能够熟练使用它,很可能就能读懂它所有的源码。 但是,小并不意味着它比其他框架的功能少。Flask 自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强健核心,其他功能则可通过扩展实现。你可以自己挑选所需的扩展包,组成一个没有附加功能的精益组合。
特点:
- l 内置在开发服务器和调试器中;
- l 与单元测试集成
- l RESTFul式的请求分发
- l 使用Jinja2 模板
- l 支持安全的Cookies
- l 与WSGI1.0 100%完全兼容
- l 基于UniCode编码
哪些项目使用了Flask:
Flask小,而且定制性高。特别是是flask本身的一些机制,如extension,以及它所提倡的组织项目的机制,都非常的优秀,即便不使用它也值得借鉴。 extension机制,不仅可以省下很多造轮子的时间,还可以在有需要的时候自己开发 extension,门槛极低。还有Flask的bluePrint设计很爽,实现应用模块化开发,支持热插拔,跟Django的app设计概念有点类似。Flask好也在好在“微”,差也差在“微”,如果开发一个企业级的应用,需要扩展的动态太多,不利于开发者快速完成复杂项目的开发任务,还有Flask的性能不是很好。
2.3 Web2py
主页 : http://web2py.com/
官方的参考书: http://web2py.com/book
官方的example: http://web2py.com/examples/default/examples
web2py是免费的开源的web框架,被用来快速地开发基于安全的数据库驱动的web应用。我们通过python来使用web2py框架,同时web2py本身也是使用python开发的。web2py是一个full-stack框架,这意味着她包含了你构建功能丰富的web应用的所有组件。
web2py被设计用来引导web开发人员使用软件开发的最佳实践,例如Model View Controller(MVC)模式。 web2py将数据的representation(the model),数据的presentation(the view)和应用程序的逻辑和流程(the controller)分割到不同的部分。web2py提供了库来帮助开发人员独立地设计,实现和测试这三个部分,和是这三个部分一起很好的工作。
web2py充分考虑了安全。这意味着她使用了最佳实践来自动地发现可能导致系统安全的问题。例如她验证所有的用户输入(阻止注入),避免了所有的输出(阻止跨网站的脚本),重命名所有的上传的文件(阻止目录遍历攻击)。web2py几乎帮开发人员考虑了所有的安全相关的问题。
web2py包含了数据抽象层Database Abstration Layer(DAL)来动态构建SQL语句,开发人员不需要自己构建SQL语句。数据抽象层(DAL)能够透明地构建适合SQLite,MySql,PostgreSQL,MSSQL,FireBird,Oracle,IBM DB2,Informix和Ingres数据库的SQL语句。数据抽象层也能够为运行于GoogleAppEngine(GAE)的Google BigTable产生函数调用。 一旦一个或多个数据库表被定义,web2py同时也生成了用于访问该数据库表的全功能的基于web的管理接口。
web2py不同于其他的web框架,在于她遵存了web2.0的理念(计算机就是web)。(其实这里作者真想说的是web2py支持多平台多语言多版本)。web2py不需要安装和配置,她能够运行在所有的能运行python的平台(Windows,Windows CE,Mac OS X, iOS,and Unix/Linux),她的开发,部署和维护都可以通过本地或web远程的接口来完成。web2py能够在CPython和Jpython的2.4, 2.5,2.6, 2.7上运行,官方的支持是2.5,以至于能保证应用程序的向后的兼容。
web2py提供了一个ticketing系统,如果一个错误产生,a ticket将会报告给用户且错误被记录下来供管理员查看。
Web2py 特点
- 简洁性:容易使用是 web2py 的首要目标,Web2py 的目标就是成为开发效率高,能直接运行的应用框架。对开发人员来说,简洁性意味着缩短学习和部署的时间,它只需要简单安装和近乎于无的配置,就完全可以在上述支持的环境中跑起来。更简单的是,它竟然内置了 trace log 和 debug 运行模式,详细的在 ticket 页面打印出出错日志。这意味着你只要有记事本,就可以去做 web2py 的开发工作了。当然,相信没有人真的会去这么做,不过这的确从另一个角度反映出设计者追求"小而美"的设计初衷。
- 扩展性:支持绝大多数的 web 服务器、数据库以及所有的 Python 库,应用框架默认的数据库是 SQLite,我们开发的过程中用到的是 MySQL,另外官方号称支持 PostgreSQL、MSSQL、Oracle、IBM DB2、Informix 以及 Ingres,数据库、服务器之间的支持,可以简单的通过更改配置文件实现,不同数据库数据会在切换的同时自动生成。
- 模块化设计:在 web2py 中,每一个功能都可以看做是一个独立的应用,这点可以从 web2py 的架构上一目了然。不同的模块之间原则上是独立的,每个模块可以看做是从前台 - 控制 - 后台的独立应用程序,而且支持即开即用。模块化的设计使得开发人员可以快速响应需求的变更,在增加新功能的同时,不会有顾虑会影响到其他的已有的模块。
- 安全性:相信安全性应该是每个 web 应用框架都会强调的的核心之一,毕竟没有安全性保证的产品,市场前景能有几何,真的很难讲。在 web2py 的安全性特性上,大体体现在数据层消除 SQL 注入、表单验证、跨域请求伪造阻止和关键字段的加密保护上。在安全性上想突出自己特有的一面真的很难,对 web2py 这种定位于快速开发、部署的 web 应用框架来说,在这一方面,很多的特性都在效仿 Rails,可以满足常见的安全性要求,我认为这已经足够了。
2.4 Tornado
官网文档:http://www.tornadoweb.org/en/stable/
Tornado 是一个开源的网络服务器框架,该平台基于社交聚合网站 FriendFeed 的实时信息服务开发而来。
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具和优化。
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。
Tornado可以大致粗略地分为四个主要的模块:
- l 一个Web 框架(包括RequestHanler以及各种各样的辅助支持类)
- l 客户端和服务端的http的实现(HTTPServer和AsyncHttpClient).
- l 一个异步的网络库(IOLoop和IOStream),为Http组件的构建块,甚至可以用来实现其他的协议(Protocols)。
- l 一个协同库(tornado.gen).允许更直接写异步代码,而不是链式调用。
知乎是国内用Tornado框架的知名网站。