当前位置: 首页 > 后端技术 > Python

最全编排-37个PythonWeb开发框架总结

时间:2023-03-26 14:35:00 Python

花了2周的时间整理了Python中所有的网站开发库(以下简称:Web框架),供大家参考。问:Web框架到底是什么?A:Web框架主要用于网站开发。开发者基于web框架实现自己的业务逻辑。Web框架实现了很多功能,并提供了一套实现业务逻辑的常用方法。问:Web框架有什么作用?A:使用web框架,很多业务逻辑以外的功能不需要自己去完善,但是可以利用框架已有的功能。Web框架减少了开发网站时的工作量。问:我们为什么要使用Web框架?A:web框架主要用于网站开发,可以实现数据交互,完善业务功能。使用web框架进行网站开发时,在数据缓存、数据库访问、数据安全验证等方面,不需要自己重新实现,只需将业务逻辑相关的代码写入框架即可。库的排序基于用户数量和文档的活动。推荐大家使用排名靠前的框架,文档更全,技术积累更多,社区更繁荣,支持更好。当你遇到自己无法解决的问题时,你可以更快、更高效地找到解决方案。1、Django框架的优点:是一个高级的Pythonweb开发框架,特点是开发速度快,代码少,扩展性强。Django使用MTV(Model、Template、View)模型组织资源,框架功能丰富,模板扩展选项最多。对于专业人士来说,Django是无可争议的Python网络开发框架第一名。缺点:包含了一些轻量级应用不需要的功能模块,没有Flask那么便携。很多类和方法的过度封装直接使用比较简单,但是修改起来比较困难。与C、C++性能相比,Djang性能低。模板实现了代码和样式的完全分离,模板中不允许出现Python代码,不够灵活。此外,学习曲线相对陡峭。2.Flask框架的优势:Flask是一个用于Pythonweb开发的微框架。严格来说,它只提供web服务器支持,不提供全栈开发支持。但是Flask非常轻量简单,基于它搭建一个web系统只需几分钟,特别适合开发小型和微型原型系统。花费更少的时间并生产出可用的系统是一种非常具有成本效益的选择。缺点:对于大型网站开发,需要设计路由映射规则,否则会导致代码混乱。对于初学者来说,很容易用低质量的代码创建“糟糕的网络应用程序”。3.Pyramid框架的优点:是一个高度可扩展和灵活的PythonWeb开发框架。非常容易上手,更适合边开发边设计的中等规模的场景。Pyramid没有提供绝对严格的框架定义,可以根据需求进行扩展和开发,对高水平的程序员非常友好。缺点:国内知名度不高,高级用法需要通过阅读源码获取灵感。默认情况下使用Chameleon模板,灵活性不是一个因素。4.web.py框架的优点:web.py顾名思义,是一个使用Python作为开发语言的web框架,简单而强大。俄罗斯排名第一的Yandex搜索引擎基于这个框架,GuidovanRossum认为它是最好的PythonWeb框架,还需要我说什么吗?有事实作证,有大牛批示,用起来吧!缺点:Web.py没有像其他框架那样保持与Python3兼容性的最新状态。这不仅意味着缺少对异步语法的支持,还意味着缺少已弃用函数的错误。此外,尚不清楚维护者是否计划在Python2支持生命周期结束后保持Web.py为最新。5、Tornado框架的优势:Tornado是一个基于异步网络函数库的web开发框架,因此可以支持上万个打开连接,web服务高效稳定。可见Tornado适用于高并发场景下的web系统。开发过程需要使用Tornado提供的框架,灵活性较差。确定场景后再考虑使用也不迟。缺点:Tornado5.0改进了与Python原生异步功能的集成。因此不再支持Python3.3,Python3.5用户必须使用Python3.5.2或更高版本。Tornado6.0将需要Python3.5及更高版本,并将完全放弃对Python2的支持。6、TurboGears框架的优点:最新版本的TurboGears试图解决原版TurboGears、Django、Rails等框架的缺陷。它支持多种数据库、JavaScript工具集和多种数据交换格式。当然,它的开发是非常高效和可扩展的。哪个更好,它还是Django?不好说,可能Django社区更活跃更重要。缺点:TurboGears的一些缺点包括基本的管理功能、很少的第三方应用程序以及只有基本的文档。TurboGears面临的一大挑战是它的强大程度。因为它在混合其他组件方面提供了无限的灵活性,所以在试图决定完成任务的路径时过于复杂。7、CherryPy框架的优点:CherryPy使开发者能够按照其他面向对象程序的类似设计方法来开发Web系统,然后用最少的代码和最简洁的方式。CherryPy已经发展了10年,具有良好的稳定性。非常适合小型Web系统和纯Python程序员。你感觉怎么样?Python有称霸世界的潜力!等着瞧。缺点:只包含为网页提供服务所需的少数东西,它应该尽可能地让人感觉不像是“网络框架”,而是像任何其他类型的Python应用程序。CherryPy包含用作低级构建块的位。包括会话标识符和cookie处理,但不包括HTML模板。与Bottle一样,CherryPy提供了一种将路由映射到磁盘目录以提供静态文件的方法。8、Falcon框架的优势:Falcon是一个支持大规模微服务API或移动App后端响应的web开发框架。它完全基于Python,提供非常高的性能、可靠性和可扩展性。猎鹰具有独特的定位和鲜明的特点。对于App开发者,后端系统建设不妨考虑Falcon。您很可能不会后悔。缺点:Falcon的缺点是它的封装模块有点太小了,包括路由、中间件、hooks,没有提供其他功能(裸壳)。附加功能,如验证等,需要开发者开发扩展。因为它是在构建RESTAPI的假设下设计的。9、Asgineer框架优点:Asgineer是一个编写异步web应用程序的工具,使用尽可能少的抽象,同时仍然提供友好的API。在几分钟内阅读指南和参考资料!在Uvicorn上运行Asgineer时,它是可用的最快的Web框架之一。它支持http长轮询、服务器端事件(SSE)和websockets。并拥有以正确(且快速)的方式为资产提供服务的公用事业。缺点:缺少中文文档。10.Bottle框架优点:Bottle是一个快速、简单、轻量级的PythonWSGI微网框架。它作为单文件模块分发,除了Python标准库之外没有任何依赖项。支持干净的动态URL。快速和Pythonic内置模板引擎,支持mako、jinja2和cheetah模板。轻松访问表单数据、文件上传、cookie、标头和其他与HTTP相关的元数据。缺点:Bottle极简主义的一个后果是某些功能根本不存在。不支持表单验证,包括CSRF保护等功能。如果你想构建一个支持高度用户交互的web应用程序,你需要自己添加它们。11.EmmettFramework优势:编写优雅的代码,专注于你的产品,你应该花更多的时间在你的产品而不是底层框架上。Emmett是发明家的框架,因为它旨在使用易于学习和理解的简单语法来简化您的开发过程。不要在路由器和不舒服的模式之间浪费时间:每次为应用程序写下路由时,一切都清晰地呈现在您眼前。缺点:缺少中文文档。12.apidaora框架优点:使用类型注解将请求/响应声明为数据类和字典,使用jsondaora验证输入数据,最快的pythonapi框架之一,可以运行在任何asgi服务器上。缺点:缺少中文文档。13.QuixoteFramework优点:Quixote是一个用Python编写基于Web的应用程序的框架。它的目标依次是灵活性和高性能。Quixote应用程序的结构往往类似于传统应用程序。格式化网页的逻辑由Python类和函数组成。Quixote不强制分离表示逻辑和“后端”逻辑。相反,我们鼓励您使用传统技术。例如,一种解决方案是将表示逻辑放在它自己的子包中。缺点:虽然Quixote得到积极维护,但发布频率较低。最近的开发重点是修复错误、提高标准合规性和增加Quixote的灵活性。14、reahl框架的优点:reahl是一个开放的框架,允许开发者完全用Python编写web应用程序。使用Python作为唯一的开发语言是它最大的特点。另外,reahl提供了相当清晰和简洁的开发组件,对于开发一般的功能性web系统来说足够清晰和可行。缺点:提供抽象词汇时,无法掌握一些更高级的用户界面效果。目前,Sass不允许构建Bootstrap的修改版本,并支持更高级的用户界面模式。15.Hug框架优点:Hug是一个Python3API开发框架。它旨在让软件工程师可以开发一次API,然后在需要时使用它。Hug框架通过提供各种接口简化了API开发。这是这个框架被称为Python3中最快的框架之一的主要原因。缺点:它使用旧的WSGI标准,这是一个同步框架,所以它不能处理像WebSockets和其他异步请求,无论如何,它仍然有很好的性能。16.BlackSheepFramework优点:BlackSheep是一个异步Web框架,用于使用Python构建基于事件的Web应用程序。它的灵感来自于Flask、ASP.NETCore和YurySelivanov的工作。缺点:缺少中文文档。17、Index.py框架的优点:实现了ASGI3接口,使用RadixTree进行路由查找。最快的PythonWeb框架之一。所有特性都为高性能Web服务的快速开发服务。大量正确的类型注解,灵活高效的路由系统,可视化的API接口和在线调试,支持Server-sentevents和WebSocket,自带一键部署命令(基于uvicorn和gunicorn),可以使用任何可用的ASGI生态。缺点:Index.py没有内置数据库、缓存等功能。如果选择困难,请直接使用Django。18.SanicFramework优点:Sanic是一个Python3.7+网络服务器和网络框架,编写速度非常快。它允许使用Python3.5中添加的async/await语法,这使您的代码非阻塞且快速。该项目的目标是提供一种简单的方法来启动和运行易于构建、扩展和最终扩展的高性能HTTP服务器。缺点:Sanic在功能方面模仿Flask,例如通过共享蓝图的概念,允许开发人员在更大的应用程序中拆分和组织他们的代码的微小子应用程序。对于只对数据进行增删改查的CRUD应用,Sanic不是一个好的选择。19.StarletteFramework优点:Starlette是一个轻量级的ASGI框架/工具包,非常适合构建高性能异步服务,它已准备好生产并为您提供以下内容:令人印象深刻的性能。WwbSocket支持。GraphQL支持。进程中的后台任务。开始和停止事件。基于请求构建的测试客户端。CORS、GZip、静态文件、流式响应。会话和cookie支持。100%测试覆盖率。100%类型注释代码库。零硬依赖。缺点:Starlette提供所有基本的网络微框架功能。但它不提供自动数据验证、序列化或API文档。20.FastapiFramework优点:FastAPI是一种现代、快速(高性能)的Web框架,用于基于标准Python类型提示使用Python3.6+构建API。非常高的性能,与NodeJS和Go相当(感谢Starlette和Pydantic)。最快的Python框架之一。将人为(开发人员)引起的错误减少大约40%。简短、简单、直观、健壮。缺点:本身没有模板语法,需要安装模板语法21.Responder框架优点:是kennethreitz新开发的项目,是一个基于Python的HTTP服务框架。底层使用Starlette框架。Starlette是一个轻量级的ASGI框架/工具包。Starlette可用于构建高性能的异步IO服务。与Starlette相比,responder对开发者更加友好。Kennethreitz写了一个名为“HTTPforHumans”的请求来使这一点更清楚。其实相比之下,responder比Starlette优雅多了。缺点:可能是新项目,包装还不完善。就当前版本而言,一些代码还不能正常工作。不过接口形式已经定义好了,预计会在以后的版本中加入。22.MoltenFramework优点:Molten是一个最小的、可扩展的、快速和高效的框架,用于使用Python构建HTTPAPI。调度自动验证请求,代码更易于维护。实例是可自动序列化的,包含API在现实世界中通常需要的各种功能,广泛使用PEP484类型提示和mypy。缺点:不使用第三方库(如Pydantic)提供数据验证、序列化和文档,它有自己的库。因此,这些数据类型定义将不容易重用。依赖注入系统需要预先注册依赖项,并将根据声明的类型解析依赖项。因此,不可能声明多个组件来提供特定类型。23.ClasticFrameworkPros:一个强大的PythonWeb框架,可以简化显式开发实践,同时消除全局状态。Clastic完全用Python语言编写,增强了可重用性和可测试性,主动URL路由检查,更好地控制应用程序初始化,改进的中间件范例,没有全局状态,ORM使用,更容易的WSGI集成。缺点:Clastic不建立全局状态;URL路由规则参数和视图函数签名不匹配,在Clastic中,这种不匹配会在构建应用程序时引发异常。24.Aiohttp框架优点:用于asyncio和Python的异步HTTP客户端/服务器。支持客户端和HTTP服务器,开箱即用地支持服务器WebSockets和客户端WebSockets,没有回调地狱。Web服务器具有中间件、信号和可插入路由。缺点:根据RFC7231aiohttpversion2.0,对接受HEAD请求做了调整。如果使用之前的版本,使用add_get()添加请求,如果使用HEAD方式访问,会返回405。如果processor会写很多responsebody内容,可以在执行HEAD方法时跳过responsebody内容的处理,提高执行效率。25.MasoniteFramework优点:现代的、以开发人员为中心的PythonWeb框架,专门用于实现实际的电池,包括具有许多开箱即用功能的开发人员工具,具有极其可扩展的架构。Masonite非常适合初学者开发他们的第一个Web应用程序,以及有经验的开发人员需要充分利用Masonite的全部潜力来完成他们的应用程序。Masonite力求从安装到部署快速简便,因此开发人员可以尽可能快速高效地从概念到创建。将它用于您的下一个SaaS!尝试一次,您就会爱上它。缺点:Masonite最大的“竞争”是Django,因为社区正在尽其所能使该框架成为下一个轻松愉快的大事。Masonite相对于Django还是个婴儿,期待它未来的表现。26.Quart框架优点:Quart是一个Python网络微框架。使用Quart,您可以呈现和提供HTML模板、编写(RESTful)JSONAPI、提供WebSockets、流式传输请求和响应数据,以及通过HTTP或WebSocket协议做几乎所有事情。缺点:它只支持Python3.7+。27.TonberryFrameworkAdvantages:一个符合ASGI的Web微框架,具有基于类的路由方法。受CherryPy影响但与asyncio兼容。一个名为Qactuar的配套ASGI服务器源自这个当前正在进行的项目。缺点:处理拉取请求时,使用自动格式化程序iSort和Black,并使用MyPy验证代码。在不消除某些类型错误的情况下,这并不总是能让MyPy完全满意,但至少尽力而为并使用注释#type:ignoresparingly。最后,尽量提供最准确的类型提示。28.cyclone框架的优点:Cyclone是一个Pythonweb服务器框架,将TornadoAPI实现为Twisted协议。Twisted是一个事件驱动的Python网络编程框架。它是公众可用的最成熟的非阻塞I/O库之一。Tornado是FriendFeed网络服务器的开源版本,它是最流行和最快的Python网络服务器之一,具有非常好的API用于构建网络应用程序。除了丰富的功能集外,Cyclone还解决了C10K问题。缺点:Cyclone不再支持python2.x。29.KleinFramework优点:Klein是一个微框架,用于使用Python开发生产就绪的Web服务。它是“微”的,因为它有一个非常小的API,类似于Bottle和Flask。它不是“微”的,因为它依赖于标准库之外的东西。这主要是因为它建立在广泛使用和经过良好测试的组件之上,例如Werkzeug和Twisted。缺点:可能有点过时了。30.nameko框架优点:AMQPRPC和事件(发布-订阅)、HTTPGET、POST和websockets,用于简单快速开发的CLI,用于单元和集成测试的实用程序。缺点:nameko微服务出错不会自动打印错误日志,需要添加监控相关的依赖。计算密集型任务会导致任务重试。31.CubicWebFramework优点:CubicWeb是一个语义Web应用程序框架,在LGPL下获得许可,它使开发人员能够通过重用组件(称为立方体)并遵循众所周知的面向对象设计原则来高效地构建Web应用程序。一个可重用组件(数据模型和视图)库,用于满足常见需求、Python编程语言的强大功能和灵活性,以及??SQL数据库、LDAP目录、Subversion和用于存储后端的Mercurial的可靠性。缺点:要获取或操作CubicWeb应用程序中的持久数据,您可以使用关系查询语言(RQL),它提供高度解耦的路径来将各种数据源相互关联。然而,随着它的实现,通过手动将查询构建为字符串,对于习惯于ORM的开发人员来说可能会觉得它已经过时了。使用CubicWeb还有其他障碍。首先,设置可能很麻烦。另一个潜在的问题是缺少原生模板引擎;生成HTML留给开发人员。CubicWeb支持Python3,但Twisted等模块本身并没有完全移植。32、Zope2框架的优点:Zope2是一个基于Python的网络应用框架,是所有Python网络应用和工具的鼻祖,是Python家族的一个强大分支。Zope2的“对象发布”系统非常适合面向对象的开发方式,可以降低开发人员的学习曲线,还可以帮助您发现应用程序中的一些不良功能。缺点:Zope不能很好地与简单的RESTfulAPI(每个Bottle或Flask),甚至具有交互性的基本网站(àlaDjango)一起工作,并且由于Zope的大小和复杂性,安装需要一些工作;这并不简单将源代码解压到项目子文件夹中没有问题。33、Web2py框架优点:Web2py是一个用Python语言编写的免费开源Web框架,旨在敏捷、快速地开发Web应用程序,具有快速、可扩展、安全和可移植的数据库驱动应用程序,遵循LGPLv3开源协议。Web2py提供一站式解决方案。整个开发过程都可以在浏览器上进行。提供Web版在线开发、HTML模板编写、静态文件上传、数据库编写等功能。其他功能包括日志记录和自动管理界面。缺点:Web2py的一个重要限制是它只与Python2.x兼容。首先,这意味着Web2py不能使用Python3的异步语法。如果您依赖Python3独有的外部库,那您就不走运了。然而,使Web2py与Python3兼容的工作正在进行中,在撰写本文时已接近完成34.PylonsFramework优点:Pylons是一种用Python语言编写的开源Web应用程序框架。它扩展了WSGI标准的应用,促进了可重用性并将功能分离为独立的模块。Pylons是典型的最新Web应用程序框架,类似于Django和TurboGears。Pylons深受RubyonRails的影响:它的两个组件,Routes和WebHelpers,是Rails特性的Python实现。缺点:Pylons已与repoze.bfg合并,现在处于仅维护模式。强烈建议新项目从新合并的Web框架金字塔开始。35.CubesFramework优点:Cubes是一个轻量级的Python框架和工具集,用于开发报告和分析应用程序、联机分析处理(OLAP)、多维分析和浏览聚合数据。它是DataBrewery的一部分。缺点:不再为每个cube提供隐式聚合record_count。它必须明确定义为聚合:旧的后端架构有局限性。它只允许一个商店,模型必须在服务器启动前已知,不可能从远程源获取模型。36.Dpark框架的优势:DPark是Spark的Python克隆。是一个用Python实现的分布式计算框架,可以轻松实现大规模数据处理和低延迟迭代计算。这种计算框架类似于MapReduce,但比它更灵活。在Python中可以很方便的用于分布式计算,并且提供了更多的函数来更好的进行迭代计算。DPark由国内豆瓣公司开发、实施和维护。据豆瓣公司介绍,目前豆瓣公司内部的大部分数据分析都是使用DPark完成的,整个项目也在趋于完善。缺点:Dpark使用进程。在Python中,由于GIL(GlobalInterpreterLock)的存在,即使在多核机器上使用多个线程,这些线程也没有办法真正实现并发执行。37.BuildbotFramework优势:Buildbot是一个用python实现的开源持续构建和持续交付工具,被Python、Mozilla、Chromium、WebKit等知名项目使用。Buildbot可以直接使用python包,轻松拥有数万个库,扩展能力强大。如果你觉得Jenkins已经很容易满足你的需求,那你就不需要Buildbot了。如果你觉得效率低下,难以扩展,一些用python等脚本可以实现的动作在Jenkins中很难实现,可以看看Buildbot。缺点:buildbot不能很好地支持多项目。