python 中web 框架 django, web.py, Tornado, Flask, Quixote比较,区别和优缺点

————————————-
django
————————————-
简介:

Django 源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。
Django 框架的核心组件有:

用于创建模型的对象关系映射
为最终用户设计的完美管理界面
一流的 URL 设计
设计者友好的模板语言
缓存系统
等等

它鼓励快速开发,并遵循MVC设计。Django遵守 BSD版权,最新发行版本是Django
1.4,于2012年03月23日发布.

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个
组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方
插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展
性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。
————————————-
案例:
instagram, pinterest
————————————-

==========================================

————————————-
web.py
————————————-

简介:

web.py是一个非常精巧的web框架,web.py 百分百开源,你能用到你能想到的任
何地方,绝对毫无限制。
web.py最早是 Aaron Swartz 在 http://reddit.com 工作时捣腾出来的,http://reddit.com
这个框架上顺利成长为一家 alexa 排名头两百名内的网站,轻松搞定了每天几百万
的 PV。 另一位发起人 Steve Huffman 说:“ web.py 其实是个 反框架 的框架,它
绝对不同于你以往对 web 框架的认知。”

————————————-
案例:
Frinki, Yandex, Make History, http://Oyster.com
豆瓣
————————————-

==========================================

————————————-
Tornado
————————————-
简介:

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开
源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了
能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具和
优化。

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显
的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对
epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web
服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要
目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活
动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的
客户端的连接的问题,请参阅 C10K problem。)

案例:
FriendFeed, 知乎

==========================================

————————————-
web2py
————————————-

简介:

web2py 是一个为Python语言提供的全功能Web应用框架,只在敏捷快速的开发Web
应用,具有快速、安全以及可移植的数据库驱动的应用,兼容 Google App Engine。
web2py编程象Rails编程一样容易,但如果你既不会Python也不会Ruby,web2py
学起来要比Rails容易多了。
最重要的是,与同等功能的J2EE或PHP相比,web2py所需的代码量要少,同时它
强迫你使用一种非常好并且安全的编程习惯。
web2py阻止目录遍历,SQL注入攻击(SQL injection),跨站脚本执行(cross
site scripting),和回复攻击弱点(reply attack vulnerability)。
web2py替你对session,cookie和应用错误进行管理。所有应用错误都会生成
一个ticket发送给用户,并且会为管理员生成一条日志项。
web2py会为你编写所有的SQL。它甚至可以创建表并决定何时执行一个数据库迁移的动作。

==========================================

————————————-
Flask
————————————-
简介:

Flask 是一个微型的 Python 开发的 Web 框架,示例代码:

from flask import Flask
app = Flask(__name__)

@app.route(“/”)
def hello():
return “Hello World!”

if __name__ == “__main__”:
app.run()

==========================================

————————————-
Bottle
————————————-

简介:

一个Python Web框架,整个框架只有一个文件,几十K,却自带了路径映射、模
板、简单的数据库访问等web框架组件,确实是个可用的框架。初学web开发可
以拿来玩玩,其语法简单,部署也很方便。

核心特征
路由:使用一个简单但有力的模式语法,映射 URLs 到代码。
模板:快速的内建模板引擎,并且支持 mako、jinja2 和 cheetah 模板。
服务器:内建 HTTP 开发服务器,并支持 paste、fapws3、flup、cherrypy
或其它任何有 WSGI 功能的服务器。
无依赖:所有东西都在一个单一的文件中,并且不依赖其它任何 Python 标准
库。

==========================================

————————————-
Quixote
————————————-

简介:

在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使
用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配
合使用。

Quixote与Apache配合使用方式如下:
使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请
求都会创建一个新的进程。
使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。
在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们
正在寻找使用fastCGI的部署经验。使用mod_python,将python代码嵌入到
Apache中。使 用SCGI,这是作者推荐的。使用Apache SCGI module scgi_mod将
遵循SCGI协议Apache将请求发送到相应的Socket如localhost:3001。而这个
Socket由本地运行的一个 Python程序打开。这个Python程序将处理请求,并返回结果。

Top Down