目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有不少共通之处,本文带领读者学习基于Python网络框架开发的经常使用知识,及目前的4种主流Python网络框架:Django、Tornado、Flask、Twisted。程序员
所谓网络框架是指这样的一组Python包,它可以使开发者专一于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面。这样能大大提升开发者的工做效率,同时提升网络应用程序的质量。正则表达式
在目前Python语言的几十个开发框架中,几乎全部的全栈网络框架都强制或引导开发者使用MVC架构开发Web应用。所谓全栈网络框架,是指除了封装网络和线程操做,还提供HTTP栈、数据库读写管理、HTML模板引擎等一系列功能的网络框架。本文重点讲解的Django、Tornado和Flask是全栈网络框架的典型标杆;而Twisted更专一于网络底层的高性能封装而不提供HTML模板引擎等界面功能,因此不能称之为全栈框架。数据库
MVC(Model-View-Controller)模式最先由Trygve Reenskaug在1978年提出,在20世纪80年代是程序语言Smalltalk的一种内部架构。后来MVC被其余语言所借鉴,成为了软件工程中的一种软件架构模式。MVC把Web应用系统分为3个基本部分。编程
这3个基本部分互相分离,使得在改进和升级界面及用户交互流程时,不须要重写业务逻辑及数据访问代码。MVC架构如图1所示。浏览器
MVC架构图服务器
注意:MVC在除Python外的其余语言中也有普遍应用,例如VC++的MFC、Java的Structs及Spring、C#的.NET开发框架,读者应该有深入的体会。网络
接下来带领你们学习当今主流的4种Python网络框架。多线程
Django于2003年诞生于美国堪萨斯(Kansas)州,最初用来制做在线新闻Web站点,于2005年加入了BSD许可证家族,成为开源网络框架。Django根据比利时的爵士音乐家Django Reinhardt命名,做者这样命名Django意味着Django能优雅地演奏(开发)功能丰富的乐曲(Web应用)。架构
它是当前Python世界里最负盛名且最成熟的网络框架。最初用来制做在线新闻的Web站点,目前已发展为应用最普遍的Python网络框架。Django的各模块之间结合得比较紧密,因此在功能强大的同时又是一个相对封闭的系统,可是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决方法。并发
Django框架的特色
相对于Python的其余Web框架,Django的功能是最完整的,Django定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着Django模块之间紧密耦合,开发者须要学习Django本身定义的这一整套技术。Django的主要特色以下。
Django的组成结构
Django是遵循MVC架构的Web开发框架,其主要由如下几部分组成。
Tornado是使用Python编写的一个强大的可扩展的Web服务器。它在处理高网络流量时表现得足够强健,却在建立和编写时有着足够的轻量级,并可以被用在大量的应用和工具中。Tornado做为FriendFeed网站的基础框架,于2009年9月10日发布,目前已经得到了不少社区的支持,而且在一系列不一样的场合中获得应用。除FriendFeed和Facebook外,还有不少公司在生产上转向Tornado,包括Quora、Turntable.fm、Bit.ly、Hipmunk及MyYearbook等。
相对于其余Python网络框架,Tornado有以下特色。
由于Tornado的上述特色,Tornado常被用做大型站点的接口服务框架,而不像Django那样着眼于创建完整的大型网站,因此本章着重讲解Tornado的异步及协程编程、身份认证框架、独特的非WSGI部署方式。
Flask是Python Web框架族里比较年轻的一个,于2010年出现,这使得它吸取了其余框架的优势,而且把本身的主要领域定义在了微小项目上。同时,它是可扩展的,Flask让开发者本身选择用什么数据库插件存储他们的数据。不少功能简单但性能卓越的网站就是基于Flask框架而搭建的,好比http://httpbin.org/就是一个功能简单但性能强大的HTTP测试项目。Flask是一个面向简单需求和小型应用的微框架。
相对于其余Python语言的Web框架而言,Flask的特色能够归结以下。
网络程序调试是在将编制好的网站投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。有经验的开发者都知道,这是保证网站系统可以正式应用的必要步骤。
Flask 自带的开发服务器使开发者在调试程序时无须再安装其余任何网络服务器,好比Tomcat、JBoss、Apache等。Flask默认处于调试状态,使得运行中的任何错误会同时向两个目标发送信息:一个是Python Console,即启动Python程序的控制台;另外一个是HTTP客户端,即Flask开发服务器将调试信息传递给了客户端。
单元测试是对最小软件开发单元的测试,其重点测试程序的内部结构,主要采用白盒测试方法,由开发人员负责。单元测试的主要目标是保证函数在给定的输入状态下,可以获得预想的输出,在不符合要求时可以提醒开发人员进行检查。
Flask提供了一个与Python自带的单元测试框架unitest无缝衔接的测试接口,即Flask对象的test_client()函数。经过test_client()函数,测试程序能够模拟进行HTTP访问的客户端来调用Flask路由处理函数,而且获取函数的输出来进行自定义的验证。
将HTML页面与后台应用程序联系起来一直是网站程序框架的一个重要目标。Flask经过使用Jinja2模板技术解决了这个问题。Jinja2是一个很是灵活的HTML模板技术,它是从Django模板发展而来的,可是比Django模板使用起来更加自由且更加高效。Jinja2模板使用配制的语义系统,提供灵活的模板继承技术,自动抗击XSS跨站攻击而且易于调试。
WSGI(Web Server Gateway Interface)具备很强的伸缩性且能运行于多线程或多进程环境下,由于Python线程全局锁的存在,使得WSGI的这个特性相当重要。WSGI已是Python界的一个主要标准,各类大型网路服务器对其都有良好的支持。WSGI位于Web应用程序与Web服务器之间,与WSGI彻底兼容使得Flask可以配置到各类大型网络服务器中。
Flask是彻底基于Unicode的。这对制做非纯ASCII字符集的网站来讲很是方便。HTTP自己是基于字节的,也就是说任何编码格式均可以在HTTP中传输。可是,HTTP要求在HTTP Head中显式地声明在本次传输中所应用的编码格式。在默认状况下,Flask会自动添加一个UTF-8编码格式的HTTP Head,使程序员无须担忧编码的问题。
以上讲到的3个Python Web框架都是围绕着应用层HTTP展开的,而Twisted是一个例外。Twisted是一个用Python语言编写的事件驱动的网络框架,对于追求服务器程序性能的应用,Twisted框架是一个很好的选择。
Twisted是一个有着10多年历史的开源事件驱动框架。Twisted支持不少种协议,包括传输层的UDP、TCP、TLS,以及应用层的HTTP、FTP等。对于全部这些协议,Twisted提供了客户端和服务器方面的开发工具。
Twisted框架的历史悠久,其主要发行版本都以Python 2为基础,最新的版本为基于Python 2.7的Twisted-15.4.0。Twisted社区正在开发基于Python 3的版本,但目前为止尚没有基于Python 3的Twisted稳定发行版。
Twisted是一个高性能的编程框架。在不一样的操做系统平台上,Twisted利用不一样的底层技术实现了高效能通讯。在Windows中,Twisted的实现基于I/O完成端口(IOCP,Input/Output Completion Port)技术,它保证了底层高效地将I/O事件通知给框架及应用程序;在Linux中,Twisted的实现基于epoll技术,epoll是Linux下多路复用I/O接口select/poll的加强版本,它能显著提升程序在大量并发链接中只有少许活跃的状况下的系统CPU利用率。
在开发方法上,Twisted引导程序员使用异步编程模型。Twisted提供了丰富的Defer、Threading等特性来支持异步编程。
欲进一步了解Python四大主流网络编程框架的编程方法、项目实战,可参见《Python高效开发实战——Django、Tornado、Flask、Twisted》一书。--------------------- --------------------- --------------------- --------------------- -----来源:CSDN 原文:https://blog.csdn.net/chenqiuge1984/article/details/80127498