论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
前端开发
›
Python 四大主流 Web 编程框架
Python 四大主流 Web 编程框架
梦见你的名字
论坛元老
|
2025-5-4 14:27:05
|
显示全部楼层
|
阅读模式
楼主
主题
1544
|
帖子
1544
|
积分
4632
目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行情况中有很多共通之处,本文领导读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django、Tornado、Flask、Twisted。
网络框架及MVC架构
所谓网络框架是指这样的一组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个基本部分。
模子(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。Model不依赖于View和Controller,它们可以在任何时间调用Model访问数据。有些Model还提供了变乱通知机制,为在其上注册过的View或Controller提供实时的数据更新。
视图(View):负责数据的表现和出现,View是对用户的直接输出。MVC中的一个Model通常为多个View提供服务。为了获取Model的实时更新数据,View应该尽早地注册到Model中。
控制器(Controller):负责从用户端收集用户的输入,可以看成提供View的反向功能。当用户的输入导致View发生变化时,这种变化必须是通过Model反映给View的。在MVC架构下,Controller一样平常不能与View直接通信,这样提高了业务数据的划一性,即以Model作为数据中心。
这3个基本部分互相分离,使得在改进和升级界面及用户交互流程时,不必要重写业务逻辑及数据访问代码。MVC架构如图1所示。
MVC架构图
注意:MVC在除Python外的其他语言中也有广泛应用,例如VC++的MFC、Java的Structs及Spring、C#的.NET开发框架,读者应该有深刻的领会。
4种Python网络框架:Django、Tornado、Flask、Twisted
接下来学习当今主流的4种Python网络框架。
企业级开发框架——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,快速天生后台数据管理网站。
高并发处理框架——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框架而搭建的,比如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
以上讲到的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等特性来支持异步编程。
感谢每一个认真阅读我文章的人,投桃报李总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋侪来说应该是最全面最完备的备战堆栈,这个堆栈也陪伴上万个测试工程师们走过最艰巨的路程,希望也能资助到你!
有必要的小伙伴可以点击下方小卡片领取
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
梦见你的名字
论坛元老
这个人很懒什么都没写!
楼主热帖
【docker系列】四种基础网络模式及自定 ...
MySQL高可用架构搭建实战
小白怎么入门网络安全?看这篇就够啦! ...
kubernetes常用命令-1-命令补全 ...
1.1 大数据简介-hadoop-最全最完整的保 ...
'林子雨大数据' 实验3 HBase操 ...
Cilium系列-9-主机路由切换为基于 BPF ...
这些行业注意了:“谨防互联网门户钓鱼 ...
北京智游科技(爱加密)-渗透测试实习 ...
Xcode Run Script 脚本
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表