13个构建小型到企业应用的最佳Python框架

Python既是一个有趣的玩具,也是一个令人畏惧的火焰喷射器。对于你可以用Python做什么,也是如此。

Python深受业余爱好者、科学家和建筑师的喜爱。

它非常容易上手,具有高阶抽象和元编程能力,可构建大型复杂系统,并拥有大量用于几乎任何操作的库。当涉及并发性和强类型时,肯定存在一些限制,但可以解决这些问题。

在本文中,我们将介绍一些最好的Python框架,用于构建大型和小型Web应用程序。

Django

对于Python社区来说,Django框架经受住了时间的考验,成为首选的Web框架。如果你在他们睡觉时袭击一个Python开发者,并迫使他们在枪口下构建一个Web应用程序,他们会自动选择Django,就像Rubyist会选择Rails一样。

这是有充分理由的。正如标语所说,Django是“为有截止日期的完美主义者设计的Web框架”。它被称为“带电池的”框架(就像Python是一种带电池的语言),它提供了所有常见功能。

有了这些内置功能,Django大大减少了开发时间:

  • 方便而愉快的ORM,框架自动创建和应用迁移。
  • 基于模型的自动生成管理面板的脚手架。
  • 支持Cookie、会话、中间件、模板等。
  • 自动应用安全功能,如XSS预防、CRSF预防等。
  • 与几乎所有数据库一起使用(在官方支持不存在的情况下,很容易找到适配器)
  • 通过GeoDjango对地理数据和空间查询提供一流支持

以及更多。简而言之,Django是一个完全成熟、友好的Web框架。

Django适合你吗?

绝对适合。

Django在所有用例中都非常合理,无论是快速原型开发还是规划企业应用程序。你唯一可能遇到的问题是框架的结构。

由于Django竭尽全力为您提供快速简便的开发体验,它对开发者施加了自己的结构(一种称为“约定优于配置”的概念),你可能不同意这一点。

例如,如果你想用其他东西(比如SQL Alchemy)替换Django的ORM,请准备好一些惊喜。

有兴趣成为具有Django和Python的全栈开发人员吗?-请查看这个fantastic online course

Flask

尽管Django在Python Web开发中占据了几乎所有的心智份额,Flask是一个强有力的竞争者。

与Django相反,Flask是一个“微框架”,这意味着它专注于做好几个最基本的事情,其他的事情留给你自己去完成。这种“其他事情留给你自己去完成”可能会让你感到沮丧或愉快,这取决于你的目标。

对于那些知道自己在做什么并且想要通过选择自己喜欢的组件来精心打造他们的Web应用程序的人来说,Flask是一个福音。

Flask提供以下功能:

  • 路由、模板、会话管理和其他实用功能。
  • 完全支持单元测试
  • 最小化、可插拔的架构
  • 一流的REST支持
  • 支持蓝图,Flask对微型Web应用程序的架构独特
  • 选择您的ORM、迁移等包
  • 灵活的应用程序结构-将文件放在最合适的位置
  • 静态文件服务
  • 符合WGSI标准

Flask适合你吗?

如上所述,Flask是一个精简的Web框架,所有内容都分解成可以替换的单独组件。如果你急于构建一个原型,你会花很多时间做一些琐碎的决定,比如数据库、文件夹结构、路由等等,这可能会事与愿违。Flask在你进行中到大型稳定的严肃项目,特别是REST API方面表现最好。

Bottle

如果你认为Flask的方式还不够精简,你还想要更多的控制权,那么你就可以尝试一下 Bottle

Bottle去除了更多的内容,到了只依赖Python标准库的程度。这意味着不需要pip安装这个或pip安装那个,不过很可能很快你就需要安装它们了。以下是Bottle吸引人的原因:

  • 单文件部署。是的,你的整个应用程序都在一个单独的“.py”文件中。
  • 没有外部依赖。只要你安装了正确的Python版本,就可以开始使用了。
  • 提供了自己的模板引擎,可以与Jinja2、Mako或Cheetah进行替换。
  • 支持表单、头部、cookie和文件上传。
  • 内置的Web服务器,可以轻松替换。

Bottle适合你吗?

如果你正在制作一个非常小的应用程序(比如不到500行代码)而且没有特殊要求,那么Bottle可能对你来说很有意义。它是一种完全无废话的创建Web应用程序的方法,但在实践中,你会发现Bottle更多的是妨碍而不是帮助。

原因是现实世界始终在变化,你不知不觉中就会有新的要求。此时,把一切都放在一个文件中会变得很麻烦。

此外,如果你认为Bottle和Flask几乎一样,你是对的。这两个框架的提案可以追溯到2012年,即使是Flask的创建者Armin也同意这一点。然而,Bottle的创建者Marcel因为单文件的方法坚持严格的意识形态区别,并坚持让这两个框架保持分离。

Zope

Zope很难解释,但我会尝试。是的,它是一个Web框架,可以用于构建大型或小型的应用程序,但不仅仅是这样。Zope更像是一个平台,包含了遵循Zope理念并由Zope Corporation维护的工具(包括Web框架)。

Zope拥有几个适用于企业应用开发的有趣组件和特性:

  • 组件注册和发现体系结构,用于配置大型应用程序。
  • ZODB——Python中唯一的对象数据库,用于本地存储对象。
  • 完整的内容管理系统框架和标准
  • 一组Web应用程序框架——经典的称为Zope,尽管还有一些新的框架(如Grok)建立在其之上。
  • 强大的软件开发、发布和维护标准。

Zope适合你吗?

如果你需要一个高度结构化的环境来构建非常大的应用程序,那么Zope是不错的选择。但是,你也会遇到一些问题。虽然Zope不断发展,但社区的规模非常小,以至于许多Python开发者甚至都没有听说过它。

很难找到教程和详细的文档,所以准备好做很多的搜索(尽管社区非常乐于助人!)。此外,你遇到的Python开发者可能不想学习Zope,以免“稀释”他们的技能。

TurboGears

TurboGears是一个高度灵活的框架,具有真正可组合的架构。它是一个根据你的需求来扩展的框架,你可以用它来构建一个单文件应用程序,也可以构建一个多租户的庞然大物。

TurboGears拥有一些优雅的特性,其中一些要么不存在于流行的框架(如Django)中,要么很难构建:

  • 对多个数据库的全面支持
  • 多数据库事务
  • 高度模块化 – 从一个单一文件开始,按需扩展
  • 强大的ORM(SQLAlchemy,比Django的ORM更成熟和强大)
  • 基于WSGI规范的可插拔架构
  • 内置对database sharding的支持
  • 以函数驱动的接口,而不是深层次、僵硬的面向对象层次结构。

TurboGears适合您吗?

如果您想快乐地开发,并希望拥有经过测试、成熟且强大的框架,远离“令人震撼的下一代”和其他媒体噪音,那么TurboGears是一个很好的选择。它在社区中备受尊重,并拥有完整而广泛的文档。

当然,TurboGears没有倾向性,这意味着初始设置和配置时间可能会更长,但它是企业应用程序开发的理想框架。

Web2py

Web2py起初是一个爱好项目,于2007年发布。它的目标是使web开发变得简单和易于访问。

因此,Web2py采用了零依赖的方法 – 它没有任何要求,无需安装,并包含一个功能齐全的基于Web的编辑器,用于开发、数据库管理和部署。

您几乎可以将其视为Android Studio,它更像是一个完整的环境,而不仅仅是一个框架。Web2py具有一些不错的特性,例如:

  • 几乎没有学习曲线。
  • 最小核心(仅12个对象),甚至可以记住!
  • 纯Python模板
  • 防止XSS、CSRF和其他攻击
  • 一个愉快而一致的API

Web2py适合您吗?

Web2py是一个稳定且有趣的框架,但很难将其推荐给其他选择,如Django、Flask等。几乎没有什么工作机会,而且单元测试的故事也不太好。尽管如此,如果您正在构建REST API,您可能会喜欢代码API和框架提供的整体体验。

CherryPy

CherryPy是另一个微框架,旨在提供基本的框架功能并迅速退居幕后。

虽然它与Flask等其他微框架相似,但CherryPy有一些独特之处:

  • 它包含一个内置的多线程服务器(这是Flask愿望清单上仍然缺少的东西)
  • (单个)Web服务器可以托管多个应用程序!
  • 将您的应用程序作为WSGI应用程序(与其他WSGI应用程序进行接口)或纯HTTP服务器(性能更好)提供
  • 对性能分析和单元测试的全面支持
  • 在PyPy(对于真正的性能迷)、Jython甚至Android上运行

CherryPy做到了这一点,然后提供了您对Web框架的期望。

CherryPy适合您吗?

如果您主要构建RESTful服务,那么CherryPy比Flask更具竞争力。它是一个成熟了十年的框架,适用于小型和大型应用程序。

Sanic

Node的崛起和其异步编程模型让许多社区感到落后,包括Python社区。为此,一系列异步Web框架出现在视野中,其中之一就是Sanic

Sanic受到Flask的强烈启发,甚至借用了路由装饰器、蓝图和其他基本功能。他们并不害羞地承认这一点。如果您是Flask的粉丝,Sanic带给您的是真正的非阻塞I/O,以满足Node应用程序的性能水平。换句话说,Sanic是支持async/await的Flask!

与CherryPy相比,Sanic在性能上具有显著优势(想象一下与Flask相比如何!)。请查看以下由DataWeave测试的结果:

正如您所看到的,一旦并发数超过每秒50次,CherryPy几乎无法正常工作,并且出现了较高的失败率。

Sanic适合您吗?

虽然Sanic的性能优势超过其他任何框架,但它可能不是您下一个项目的最佳选择。主要原因是缺乏异步库。

大部分现有的Python工具和库都是为单线程的CPython版本编写的,没有考虑到高并发或异步操作。例如,如果您喜欢的ORM不支持异步操作,那么使用Sanic的整体意义就被破坏了。

由于这些成熟度和可用性的原因,我们不会再讨论Python中的任何其他异步框架。

Masonite

我几个月前发现了这个框架,并认为它是朝着正确的方向迈进的一步。自那时以来,2.0版本已经发布,我觉得现在是时候给Masonite一些关注了。

简单来说,Masonite是Laravel的Python版本(一个著名的PHP framework,如果你不知道的话)。为什么这很重要?这很重要,因为Laravel是基于Ruby on Rails的原则构建的,这两个框架一起使得非Ruby开发人员能够体验到“Rails方式”。

Laravel(在某种程度上还有Rails)开发人员会觉得非常亲切,几乎没有学习成本。当我尝试使用Masonite(我确实提交了一两个问题,包括一个错误!)时,我能够构建REST API而毫不费力,因为我的Laravel肌肉记忆让一切变得顺利。

作为一个”带电池的全栈框架”,Masonite在框架中带来了一些有趣的东西:

  • Active-record风格的ORM
  • 数据库迁移(与Django不同,需要开发者创建)
  • 强大的IoC容器用于依赖注入
  • 自己的CLI(称为”craft”)用于脚手架和运行任务
  • 一流的单元测试支持

Masonite最大的“竞争对手”是Django,因为该社区正尽其所能将该框架推广为易用、令人愉快和下一个大事件。它是否能超越Django,只有时间才能告诉我们(如果你问我,它有很大的机会),但是关于两者的比较讨论,请参阅here

Masonite适合您吗?

与Django相比,Masonite还很年轻,所以不可能推荐它胜过Django。也就是说,如果您喜欢Rails方式(或Laravel的方式)的做事方式,您会喜欢Masonite所提供的。它非常适合快速构建需要预先配置和易于切换的原型。

Falcon

Falcon是一个为大规模微服务设计的Python Web框架。

该库具有完整的系统,包括模板、附加包和插件,您可以在项目中使用。Falcon是获取您所需资源的绝佳起点。

该项目还有一个强大的community,用户在其中讨论该框架的设计和开发。

Falcon提供以下功能:

  • 可调试:您可以轻松调试Falcon应用,因为它会告诉您哪些输入导致了哪些输出。幸运的是,Falcon上的所有未处理异常都没有被封装或屏蔽。
  • 灵活:Falcon让您对实现细节拥有控制权,使您能够根据需要自定义应用程序。最简化的方法使得调试和调整应用程序变得更加容易。
  • 快速:Falcon已经被证明比其他框架更快地处理请求。该框架与PyPy完美配合。
  • ASGI和WSGI支持:无论您是异步服务器网关接口(ASGI)还是Web服务器网关接口(WSGI)的粉丝,您都可以使用Falcon。WSGI是同步的,意味着它按顺序处理请求(一个接一个)。ASGI是异步的,请求同时进行处理。

Falcon对您是否合适?

对于构建微服务和关键任务的REST API,Falcon是一个不错的选择。这个框架被设计为快速,使其成为处理多个事务的应用程序的绝佳选择。

Pyramid

Pyramid被称为“从小开始,最后做大,保持最终状态的框架”。如果你是一个学习者,你会发现Pyramid很容易上手。

该框架允许您选择安全、模板、数据库等方面的使用方法。您甚至可以从脚手架开始。

Pyramid提供以下功能:

  • 可扩展性:虽然您可以从小开始,但并不意味着您的应用程序将永远保持这种规模。Pyramid具有附加、扩展和配置系统,帮助您扩展应用程序。
  • 身份验证和授权:您可以通过内置的授权和authentication功能保护您的应用程序,防止未经授权的访问。
  • 可扩展:Pyramid被设计为整个应用程序生命周期的完整包。该平台致力于API的稳定性,以确保您始终拥有可信赖的API。
  • 高度可定制:您可以自定义或覆盖核心代码而无需分叉。这种方法使您能够创建适合您需求的应用程序。

Pyramid对您是否合适?

在构建内容驱动和大规模Web应用程序时,您应该使用Pyramid。模块化和灵活的架构使得扩展应用程序变得容易。Pyramid与数据库的集成非常简单,并且具有灵活的路由支持,非常适合内容站点,如新闻平台和博客。

Tornado

作为Python框架之外,Tornado是一个异步网络库。与大多数基于WSGI的Python框架不同,Tornado每个进程只运行一个线程。

您仍然可以通过tornado.wsgi获得对WSGI的支持。但是,大部分开发都是基于Tornado自己的接口tornado.web进行的。

Tornado提供以下功能:

  • 非阻塞网络I/O:该库建立在asyncio库之上,使其能够处理数千个连接而不会有太多开销。
  • 安全性和身份验证:Tornado具有诸如跨站请求伪造保护、HTTPS和cookie等安全功能。同样的库还具有内置的身份验证支持。
  • 可扩展性:在使用Tornado时,您可以根据需要增加容量或添加更多服务器。
  • WebSocket支持:通过内置的WebSocket实现,服务器与客户端之间进行实时通信。

Tornado对您是否合适?

Tornado如果您想要构建高性能的Web服务,那么将是一个完美的选择。这个Python框架具有高度可伸缩性,其非阻塞I/O特性使其非常适合构建可处理大量并发连接的服务。

Tornado也适用于处理大量I/O操作的应用程序,例如处理大文件或从外部API获取数据。

CubicWeb

CubicWeb是一个语义化的Web应用程序框架,允许开发人员按照面向对象的设计原则构建应用程序。

该框架拥有一组库和工具,开发人员可以使用这些工具构建强大的应用程序。

CubicWeb具有以下功能:

  • 可重复使用的组件:通过在应用程序中重用组件,可以节省开发时间。
  • 使用查询语言:CubicWeb在后台使用一种查询语言。
  • 与多个数据库兼容:利用CubicWeb与Mercurial、LDAP目录和SQL数据库的兼容性。
  • 可定制:CubicWeb灵活且可定制,允许您控制应用程序的工作方式。

CubicWeb适合您吗?

如果您想构建需要灵活查询和数据建模功能的应用程序,CubicWeb是一个很好的选择。因此,您可以使用CubicWeb构建社交网络、知识管理和科学数据管理应用程序。

结论

市面上有各种各样的框架,大大小小都有。尽管对于小型项目来说,您几乎可以选择任何框架,但企业应用程序有着许多这些框架无法满足的需求。如果问我,在企业开发方面,我倾向于选择Django(在一定程度上)、Zope和TurboGears。即便如此,在实践中,任何一位有经验的架构师都可以选择一个微框架并搭建起他们的架构。这也是Flask和类似想法取得成功的原因。

如果您是新手,那么学习Python可以参考this online course

接下来,探索一些专门的Python frameworks to build APIs

类似文章