Python 四大主流网络编程框架

高并发处理框架—— TornadoTornado 是使用 Python 编写的一个强大的可扩展的 Web 服务器 。它在处理高网络流量时表现得足够强健,却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中 。Tornado 作为 FriendFeed 网站的基础框架,于2009年9月10日发布,目前已经获得了很多社区的支持,并且在一系列不同的场合中得到应用 。除 FriendFeed 和 Facebook 外,还有很多公司在生产上转向Tornado,包括 Quora、Turntable.fm、Bit.ly、Hipmunk 及 MyYearbook 等 。
相对于其他 Python 网络框架,Tornado 有如下特点 。
完备的 Web 框架:与 Django、Flask 等一样,Tornado 也提供了 URL 路由映射、Request 上下文、基于模板的页面渲染技术等开发 Web 应用的必备工具 。
是一个高效的网络库,性能与 Twisted、Gevent 等底层 Python 框架相媲美:提供了异步 I/O 支持、超时事件处理 。这使得 Tornado 除了可以作为 Web 应用服务器框架,还可以用来做爬虫应用、物联网关、游戏服务器等后台应用 。
提供高效 HTTPClient:除了服务器端框架,Tornado 还提供了基于异步框架的HTTP 客户端 。
提供高效的内部 HTTP 服务器:虽然其他 Python 网络框架(Django、Flask)也提供了内部 HTTP 服务器,但它们的 HTTP 服务器由于性能原因只能用于测试环境 。而 Tornado 的HTTP服务器与 Tornado 异步调用紧密结合,可以直接用于生产环境 。
完备的 WebSocket 支持:WebSocket 是 html5 的一种新标准,实现了浏览器与服务器之间的双向实时通信 。
因为 Tornado 的上述特点,Tornado 常被用作大型站点的接口服务框架,而不像 Django 那样着眼于建立完整的大型网站,所以本章着重讲解 Tornado 的异步及协程编程、身份认证框架、独特的非 WSGI 部署方式 。
支持快速建站的框架——FlaskFlask 是 Python Web 框架族里比较年轻的一个,于 2010 年出现,这使得它吸收了其他框架的优点,并且把自己的主要领域定义在了微小项目上 。同时,它是可扩展的,Flask 让开发者自己选择用什么数据库插件存储他们的数据 。很多功能简单但性能卓越的网站就是基于 Flask 框架而搭建的,比如 http://httpbin.org/ 就是一个功能简单但性能强大的 HTTP 测试项目 。Flask 是一个面向简单需求和小型应用的微框架 。
相对于其他 Python 语言的 Web 框架而言,Flask 的特点可以归结如下 。
内置开发服务器和调试器
网络程序调试是在将编制好的网站投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程 。有经验的开发者都知道,这是保证网站系统能够正式应用的必要步骤 。
Flask 自带的开发服务器使开发者在调试程序时无须再安装其他任何网络服务器,比如 Tomcat、JBoss、Apache 等 。Flask 默认处于调试状态,使得运行中的任何错误会同时向两个目标发送信息:一个是 Python Console,即启动 Python 程序的控制台;另一个是 HTTP 客户端,即 Flask 开发服务器将调试信息传递给了客户端 。
与 Python 单元测试功能无缝衔接
单元测试是对最小软件开发单元的测试,其重点测试程序的内部结构,主要采用白盒测试方法,由开发人员负责 。单元测试的主要目标是保证函数在给定的输入状态下,能够得到预想的输出,在不符合要求时能够提醒开发人员进行检查 。
Flask 提供了一个与 Python 自带的单元测试框架 unitest 无缝衔接的测试接口,即 Flask 对象的 test_client() 函数 。通过 test_client() 函数,测试程序可以模拟进行 HTTP 访问的客户端来调用 Flask 路由处理函数,并且获取函数的输出来进行自定义的验证 。
使用 Jinja2 模板
将 HTML 页面与后台应用程序联系起来一直是网站程序框架的一个重要目标 。Flask 通过使用 Jinja2 模板技术解决了这个问题 。Jinja2 是一个非常灵活的 HTML 模板技术,它是从 Django 模板发展而来的,但是比 Django 模板使用起来更加自由且更加高效 。Jinja2 模板使用配制的语义系统,提供灵活的模板继承技术,自动抗击 XSS 跨站攻击并且易于调试 。
完全兼容 WSGI 1.0 标准
WSGI(Web Server Gateway Interface)具有很强的伸缩性且能运行于多线程或多进程环境下,因为 Python 线程全局锁的存在,使得 WSGI 的这个特性至关重要 。WSGI 已经是 Python 界的一个主要标准,各种大型网路服务器对其都有良好的支持 。WSGI 位于Web应用程序与 Web 服务器之间,与 WSGI 完全兼容使得 Flask 能够配置到各种大型网络服务器中 。
基于 Unicode 编码
Flask 是完全基于 Unicode 的 。这对制作非纯 ASCII 字符集的网站来说非常方便 。HTTP 本身是基于字节的,也就是说任何编码格式都可以在 HTTP 中传输 。但是,HTTP 要求在 HTTP Head 中显式地声明在本次传输中所应用的编码格式 。在默认情况下,Flask 会自动添加一个 UTF-8 编码格式的 HTTP Head,使程序员无须担心编码的问题 。


推荐阅读