百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python四大主流网络编程框架,你知道么?

zhezhongyun 2025-02-15 18:16 24 浏览

高并发处理框架—— Tornado

Tornado 是使用 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 部署方式。

支持快速建站的框架——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 提供了一个与 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,使程序员无须担心编码的问题。

底层自定义协议网络框架——Twisted

以上讲到的 2个 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等特性来支持异步编程。

企业级开发框架——Django

Django 于 2003 年诞生于美国堪萨斯(Kansas)州,最初用来制作在线新闻Web站点,于 2005 年加入了 BSD 许可证家族,成为开源网络框架。Django 根据比利时的爵士音乐家 Django Reinhardt 命名,作者这样命名 Django 意味着Django 能优雅地演奏(开发)功能丰富的乐曲(Web应用)。

它是当前Python世界里最负盛名且最成熟的网络框架。最初用来制作在线新闻的 Web 站点,目前已发展为应用最广泛的 Python 网络框架。Django 的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统,但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决方法。

Django 框架的特点

相对于 Python 的其他 Web 框架,Django 的功能是最完整的,Django 定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着 Django模块之间紧密耦合,开发者需要学习 Django 自己定义的这一整套技术。Django的主要特点如下。

完善的文档:经过 10 多年的发展和完善,Django 有广泛的应用和完善的在线文档,开发者遇到问题时可以搜索在线文档寻求解决方案。

集成数据访问组件:Django 的 Model 层自带数据库 ORM 组件,使开发者无须学习其他数据库访问技术(dbi、SQLAlchemy 等)。

强大的 URL 映射技术:Django 使用正则表达式管理 URL 映射,因此给开发者带来了极高的灵活性。

后台管理系统自动生成:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理 Web 控制台。

错误信息非常完整:在开发调试过程中如果出现运行异常,则 Django 可以提供非常完整的错误信息帮助开发者定位问题,比如缺少xxx组件的配置引用等,这样可以使开发者马上改正错误。

Django 的组成结构

Django 是遵循MVC架构的Web开发框架,其主要由以下几部分组成。

管理工具(Management):一套内置的创建站点、迁移数据、维护静态文件的命令工具。

模型(Model):提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义及操作。

视图(View):Django 的视图层封装了 HTTP Request 和 Response 的一系列操作和数据流,其主要功能包括URL映射机制、绑定模板等。

模板(Template):是一套 Django 自己的页面渲染模板语言,用若干内置的tags和filters定义页面的生成方式。

表单(Form):通过内置的数据类型和控件生成 HTML 表单。

管理站(Admin):通过声明需要管理的 Model,快速生成后台数据管理网站。

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

相关推荐

关于CSS伪类&伪元素的一些知识——CSS学习之路

最近两天接触到了CSS伪类和伪元素之间的关系,伪类和伪元素在css代码中使用:做标识符,同来识别元素。我倒是理解,可是为什么时常见到一会用一个冒号,一会用两个,然后就感觉很迷糊了,于是就有了这一篇文章...

CSS中before 和after的用法

CSS有两个说不上常用的伪类:before和:after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此。一基本语法在了解进阶的应用之前,先来了解一下语法规则。平常仅仅需要将这...

CSS 样式总翻车?5 个实战技巧让布局效率暴增 200%!

前端工程师们,是不是经常遇到这种崩溃瞬间?精心设计的CSS样式,一到不同浏览器就“变形走样”,或是响应式布局怎么调都达不到预期效果,改来改去不仅浪费时间,还容易产生一堆冗余代码。别慌!今天带来...

微信小程序入门教程之二:页面样式

这个系列的上一篇教程,教大家写了一个最简单的Helloworld微信小程序。但是,那只是一个裸页面,并不好看。今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的页...

网格不迷路:用 CSS 网格生成器打造完美布局

前言你是否曾因写错grid-template-areas而捶键盘?是否在面对千层嵌套的复杂布局时,瞬间怀疑人生,甚至思考要不要转行去卖奶茶?别慌,CSS网格生成器闪亮登场,像拼乐高一样,帮你轻松...

MFC转QT:Qt高级特性 - 样式表

Qt样式表概述Qt样式表(QtStyleSheets)是基于CSS的样式系统,允许开发者以类似于Web前端的方式定制Qt应用程序的外观。这一特性极大地简化了Qt应用的界面定制,提供了比MFC更强大...

什么是CSS?

CSS是一种用来描述网页样式的语言,它可以控制HTML元素的颜色、大小、位置、布局等外观效果。CSS的全称是层叠样式表(CascadingStyleSheets),它的基本语法由选择器和...

从零开始学习网站CSS布局

CSS是前端开发中的重要技术之一,而CSS布局则是CSS技术中最基础的一部分。学习CSS布局是Web开发者的必修课,也是掌握CSS技能的基石。CSS布局指的是如何使用CSS定位和排版HTML元素。CS...

CSS3 渐变类型及其语法

线性渐变:CSS3可以让背景产生渐变效果,渐变属性有两种,即linear-gradient(线性渐变)和radial-gradient(圆形渐变),语法如下background:linear-gra...

五大顶级CSS性能优化工具,值得程序员一试!

为什么Web页面的加载速度如此重要?在这个信息化的时代,如果一个网站的加载时间过长,大部分用户会极其不耐烦地选择“关掉”!这让辛辛苦苦熬夜敲代码的程序员们情何以堪,不管网站功能如何强大,用户根本都没来...

get css中的clamp()函数,好用到起飞

CSS中有大量令人惊叹的属性和特性,但似乎没有人谈论的是clamp函数。这个函数让我们可以对任何CSS属性执行min-width,max-width,和之类的操作。CSSclamp语法cl...

Google Chrome终于支持CSS Variables了

这篇文章要报道的并不是“新闻”,因为W3C早已开始着手CSS变量(又称‘自定义属性’)方面的工作。而作为CSS4非正式标准的一部分,Mozilla早在Firefox版本号还是29的时候就已经支持它了。...

CSS3 过渡与动画

在现代网页设计中,平滑的过渡和生动的动画效果已成为提升用户体验不可或缺的元素。CSS3为我们提供了强大的transition和animation属性,让开发者能够轻松实现各种视觉效果。本文将...

css基础篇11--表格样式

目标表格边框合并表格边框的间距设置表格标题位置的设置表格可以说是网页必备的元素之一,但是原生的表格样式都是很丑,列如表格加入边框的默认情况下,单元格与单元格之间有一定的空隙;设置单元格边框间距等等,都...

WebDriver-工具辅助生成XPath语法和CSS语法

1.FireBug插件1.1生成XPath语法打开Firefox浏览器FireBug插件,单击插件左上角的鼠标箭头,再单击页面上需要定位的元素,在元素行上右击弹出快捷菜单,选择“复制XPath”,将会...