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

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

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

高并发处理框架—— 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,快速生成后台数据管理网站。

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

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...