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