Tornado是一款用Python编写的功能强大的可扩展Web服务器。它足够健壮,可以处理高网络流量,但是足够轻量级,可以被创建和编写,并且可以在大量应用程序和工具中使用。Tornado作为FriendFeed网站的基本框架,于2009年9月10日发布,得到了众多社区的支持,并在一系列不同场合得到了应用。除了FriendFeed和Facebook,很多公司在制作上也转向了Tornado,包括Quora、转盘. fm、Bit.ly、Hipmunk和MyYearbook等。
与其他Python网络框架相比,Tornado具有以下特点。
完整的Web框架:像Django和Flask一样,Tornado也为开发Web应用提供了必要的工具,如URL路由映射、请求上下文、基于模板的页面渲染技术等。
是一个高效的网络库,性能堪比Twisted、Gevent等底层Python框架。它提供异步输入/输出支持和超时事件处理。因此,Tornado不仅可以作为Web应用服务器框架,还可以作为爬虫应用、物联网网关、游戏服务器等后台应用。
提供高效的HTTPClient: Tornado除了服务器端框架外,还提供基于异步框架的HTTP客户端。
提供高效的内部HTTP服务器:虽然其他Python网络框架也提供内部HTTP服务器,但是出于性能原因,它们的HTTP服务器只能在测试环境中使用。Tornado的HTTP服务器与Tornado异步调用紧密结合,可以直接在生产环境中使用。
完整的WebSocket支持:WebSocket是一个新的HTML5标准,实现了浏览器和服务器之间的双向实时通信。
由于Tornado的上述特点,Tornado经常被用作大型网站的界面服务框架,而不是像Django那样专注于构建完整的大型网站。因此,本章重点介绍Tornado的异步协同编程、身份认证框架和独特的非WSGI部署模式。
支持快速建站的框架——Flask
Flask,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提供了一个与unitest无缝连接的测试接口,unitest是Python自带的单元测试框架,也就是Flask对象的test_client函数。通过test_client函数,测试程序可以模拟客户端访问HTTP调用Flask路由处理函数,并获取函数的输出进行定制验证。
使用Jinja2模板
将HTML页面与后台应用连接一直是网站程序框架的重要目标。Flask利用Jinja2模板技术解决了这个问题。Jinja2是一种非常灵活的HTML模板技术,是从Django模板发展而来的,但是使用起来比Django模板更加自由高效。Jinja2模板采用语义系统,提供灵活的模板继承技术,自动抵抗XSS跨站攻击,易于调试。
与WSGI 1.0标准完全兼容
WSGI具有很强的可扩展性,可以在多线程或多进程环境下运行。由于Python线程全局锁的存在,WSGI的这个特性非常重要。WSGI一直是Python中的一个主要标准,得到了各种大规模网络服务器的很好支持。WSGI位于Web应用和Web服务器之间,与WSGI完全兼容,使得Flask可以配置到各种大型网络服务器。
基于Unicode的编码
Flask完全基于Unicode。这对于制作非纯ASCII字符集的网站非常方便。HTTP本身是基于字节的,这意味着任何编码格式都可以在HTTP中传输。但是HTTP要求在这个传输中应用的编码格式在HTTP Head中明确声明。默认情况下,Flask会自动添加一个UTF-8编码格式的HTTP Head,这样程序员就不用担心编码了。
底层自定义协议网络框架——Twisted
上面提到的两个Python Web框架都是围绕应用层HTTP开发的,但是Twisted是个例外。Twisted是用Python语言编写的事件驱动的网络框架。扭曲框架是寻求服务器程序性能的应用程序的好选择。
Twisted是一个有10多年历史的开源事件驱动框架。Twisted支持多种协议,传输层的UDP、TCP、TLS,应用层的HTTP、FTP。对于所有这些协议,Twisted为客户端和服务器提供了开发工具。
扭曲框架由来已久。其主要发行版本基于Python 2,最新版本是基于Python 2.7的twist-15 . 4 . 0。Twisted社区正在开发一个基于Python 3的版本,但到目前为止还没有稳定发布的基于Python 3的Twisted。
Twisted是一个高性能的编程框架。Twisted使用不同的底层技术,在不同的操作系统平台上实现高性能的通信。在Windows中,Twisted的实现基于I/O完成端口技术,保证底层高效通知框架和应用I/O事件;在Linux中,Twisted的实现是基于epoll技术的。epoll是Linux下复用I/O接口选择/轮询的增强版,在只有少量活动并发连接的情况下,可以显著提高系统的CPU利用率。
在开发方法上,Twisted指导程序员使用异步编程模型。Twisted提供了丰富的特性,如延迟和线程,以支持异步编程。
企业级开发框架——Django
姜戈2003年出生于美国堪萨斯州,最初用于制作在线新闻网站。2005年,Django加入了BSD许可家族,成为开源网络框架。姜戈是以比利时爵士乐手坦哥·雷恩哈特的名字命名的。作者对Django的命名,意味着Django可以优雅地播放功能丰富的音乐。
它是Python世界中最著名、最成熟的网络框架。最初用于制作在线新闻的网站已经发展成为使用最广泛的Python网络框架。Django的模块集成紧密,所以是一个相对封闭的系统,功能强大。然而,其完善的在线文档和开发社区使开发人员能够在遇到问题时找到解决方案。
姜戈框架的特点
相比其他Python Web框架,Django的功能最全。Django定义了一套完整的功能,如服务发布、路由映射、模板编程和数据处理。这也意味着Django模块紧密耦合,开发者需要学习Django定义的整套技术。姜戈的主要特点如下。
完美文档:经过10多年的发展和完善,Django拥有广泛的应用和完善的在线文档,开发者遇到问题可以在在线文档中搜索解决方案。
集成数据访问组件:Django的Model层有自己的数据库ORM组件,这样开发者就不需要学习其他的数据库访问技术。
强大的URL映射技术:Django使用正则表达式来管理URL映射,给开发者带来了极大的灵活性。
后台管理系统的自动生成:开发人员只需几行简单的配置和代码,就可以实现一个完整的后台数据管理Web控制台。
错误信息非常完整:如果在开发调试过程中出现异常操作,Django可以提供非常完整的错误信息,帮助开发者定位问题,比如缺少xxx组件的配置引用,让开发者可以立即纠正错误。
姜戈的组成和结构
Django是一个遵循MVC架构的Web开发框架,主要由以下几个部分组成。
管理工具:一套用于创建站点、迁移数据和维护静态文件的内置命令工具。
模型:提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义和操作。
视图:Django的视图层封装了HTTP Request和Response的一系列操作和数据流,主要功能包括URL映射机制、绑定模板等。
模板:是一套Django自带的页面渲染模板语言,使用几个内置的标签和过滤器来定义页面生成模式。
表单:通过内置的数据类型和控件生成HTML表单。
管理站:通过声明要管理的模型,快速生成后台数据管理网站。
*声明:本文在互联网上组织,版权归原作者所有。如果来源信息有误或侵犯权益,请联系我们进行删除或授权。