用于构建小型到企业应用程序的 9 个最佳 Python 框架

Python 既是有趣的玩具,又是可怕的火焰喷射器。 这同样适用于您可以使用 Python 执行的操作。

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

它非常容易上手,具有构建大型复杂系统的高阶抽象和元编程功能,并且拥有大量的库可以做几乎任何事情。 当然,在并发性和强类型方面存在限制,但您可以解决这些问题。

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

姜戈

姜戈 框架经受住了时间的考验,成为 Python 社区的首选 Web 框架。 如果你在睡梦中殴打 Python 开发人员并用枪指着他们构建 Web 应用程序,他们会自动使用 Django,就像 Rubyist 使用 Rails 一样。

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

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

  • 一个方便且令人愉快的 ORM,由框架自动创建和应用迁移。
  • 用于根据您的模型自动生成管理面板的脚手架。
  • 支持cookies、session、中间件、模板等。
  • 自动应用 XSS 预防、CRSF 预防等安全功能。
  • 几乎适用于所有数据库(很容易找到不存在官方支持的适配器)
  • 对地理数据和空间查询的一流支持 GeoDjango

还有很多很多。 只要说 Django 是一个成熟的、友好的 Web 框架就够了。

Django 适合你吗?

绝对没错。

Django 对所有用例都非常有意义,无论是快速原型设计还是规划企业应用程序。 您会遇到的唯一粗糙边缘是框架的结构。 由于 Django 竭尽全力使您的开发变得快速和容易,因此它将其结构(一种称为“约定优于配置”的概念)强加给开发人员,您可能不同意。 例如,如果您想用其他东西(比如 SQL Alchemy)替换 Django ORM,请做好意外的准备。

有兴趣成为使用 Django 和 Python 的全栈开发人员吗? – 看看这个 很棒的在线课程.

烧瓶

虽然 Django 占据了 Python Web 开发中几乎所有的注意力, 烧瓶 是一个强有力的竞争者。

与 Django 不同,Flask 是一个“微框架”,这意味着它专注于做一些最起码的事情,剩下的交给你。 这种“剩下的由你决定”可能会令人沮丧或高兴,这取决于你的目标是什么。 对于那些知道自己在做什么并希望通过选择自己选择的组件来精心制作 Web 应用程序的人来说,Flask 是天赐之物。

Flask 提供以下功能:

  • 路由、模板、会话管理和其他有用的功能。
  • 完全支持单元测试
  • 最小的可插拔架构
  • 一流的 REST 支持
  • 支持蓝图,Flask 对微型 Web 应用程序的独特架构
  • 选择用于 ORM、迁移等的包。
  • 灵活的应用程序结构——将您的文件放在对您最有意义的地方
  • 静态文件服务
  • 符合 WGSI 标准
  如何修复 Roku 历史频道不起作用

Flask 适合你吗?

如前所述,Flask 是一个最小的 Web 框架,所有内容都分解为可以交换的单独组件。 如果您急于构建原型,您将花费大量时间在数据库、文件夹结构、路由等方面做出琐碎的决定,这可能会适得其反。 Flask 在你从事一个稳定、严肃的大中型项目时效果最好,尤其是 REST API。

瓶子

如果您认为 Flask 的方法不够简单,并且您仍然想要更多的控制权,请向 瓶子.

Bottle 剥离得更多,以至于唯一的依赖是 Python 标准库。 这意味着没有 pip install this 或 pip install that,尽管你很可能很快就需要这样做。 这就是为什么 Bottle 在某些人眼中脱颖而出的原因:

  • 单文件部署。 是的,您的整个应用程序都存在于一个“.py”文件中。
  • 没有外部依赖性。 如果您安装了正确的 Python 版本,那么您就可以开始了。
  • 提供其模板引擎,可以与 Jinja2、Mako 或 Cheetah 交换。
  • 支持表单、标题、cookie 和文件上传。
  • 内置网络服务器,可轻松更换。

瓶子适合你吗?

如果您正在制作一个没有特殊要求的非常小的应用程序(例如,少于 500 行代码),Bottle 可能对您来说很有意义。 这是创建 Web 应用程序的完全严肃的方法,但在实践中,您会发现 Bottle 给您带来的阻碍多于帮助。 原因是现实世界总是在不知不觉中发生变化。 新的要求将落在你的头上。 到那时,将所有内容放在一个文件中将变得很麻烦。

另外,如果您认为 Bottle 和 Flask 几乎相似,那您是对的。 的建议 合并 这两个可以追溯到 2012 年,甚至 Flask 的创建者 Armin 也同意这一点。 但是,Bottle 的创建者 Marcel 由于单文件方法而保持严格的意识形态区分,并坚持认为两者保持分离。

佐普

佐普 解释起来很复杂,但我会尝试。 是的,它是一个 Web 框架,可用于构建或大或小的应用程序,但这还不是全部。 Zope 更像是一个平台,由根据 Zope 理念创建并由 Zope Corporation 维护的工具(包括 Web 框架)组成。

Zope 有几个适合企业应用程序开发的有趣组件和特性:

  • 用于配置大型应用程序的组件注册和发现架构。
  • ZODB —(唯一的)Python 对象数据库,用于本地存储对象。
  • 内容管理系统的成熟框架和标准
  • 一组 Web 应用程序框架——规范的框架仍然称为 Zope,尽管几个新的框架(如 Grok)已经建立在它之上。
  • 软件开发、发布和维护的严格标准。

Zope适合你吗?

如果您正在寻找一个高度结构化的环境来构建真正的大型应用程序,那么 Zope 是不错的选择。 也就是说,您也会遇到很多问题。 虽然 Zope 不断发展,但社区确实很小,以至于许多 Python 开发人员甚至都没有听说过它。 查找教程和大量文档很困难,因此请准备好进行大量挖掘(尽管社区真的很有帮助!)。 此外,您遇到的 Python 开发人员可能不想学习 Zope 并“稀释”他们的技能。

  修复 Dota 2 磁盘写入错误

涡轮齿轮

涡轮齿轮 是一个高度灵活的框架,具有真正可组合的架构。 它是一个可根据您的需要进行扩展的框架,您可以使用它来构建单文件应用程序或多租户庞然大物。

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

  • 对多个数据库的一流支持
  • 多数据库事务
  • 高度模块化——从单个文件开始,并根据需要扩展
  • 强大的ORM(SQLAlchemy,比Django的ORM更成熟、更强大)
  • 基于 WSGI 规范的可插拔架构
  • 内置支持数据库分片
  • 一个功能驱动的接口,而不是深层的、严格的面向对象的层次结构。

TurboGears 适合您吗?

如果您想快乐地开发并想要一个经过测试的、成熟的、健壮的框架来远离“很棒的、下一代”的媒体噪音等等,TurboGears 是一个非常合适的选择。 它在社区中备受推崇,并拥有完整、广泛的文档。 当然,TurboGears 并不固执己见,这意味着初始设置和配置时间可能会更长,但它是企业应用程序开发的理想框架。

Web2py

Web2py 最初是一个业余爱好项目,于 2007 年发布。其目标是使 Web 开发变得简单,并且每个人都可以使用。

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

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

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

Web2py 适合你吗?

Web2py 是一个稳定而有趣的框架,但很难将它与其他选项(如 Django、Flask 等)进行推荐。几乎没有任何工作,单元测试故事也不是很好。 也就是说,您可能会喜欢代码 API 和框架提供的整体体验,尤其是在构建 REST API 时。

樱桃派

樱桃派 是另一个旨在提供基本框架功能并快速摆脱困境的微框架。

虽然它与 Flask 等其他微框架相当,但 CherryPy 有一些不同之处:

  • 它包含一个内置的多线程服务器(Flask 的愿望清单上保留的东西)
  • (单个)Web 服务器可以托管多个应用程序!
  • 将您的应用程序作为 WSGI 应用程序(与其他 WSGI 应用程序交互)或普通 HTTP 服务器(性能更好)
  • 对分析和单元测试的一流支持
  • 在 PyPy(真正的性能迷)、Jython 甚至 Android 上运行

CherryPy 完成了所有这些,然后是您期望从 Web 框架获得的常见功能。

CherryPy 适合你吗?

如果您主要构建 RESTful 服务,那么 CherryPy 是比 Flask 更重要的竞争者。 这是一个已有十年历史的框架,已经非常成熟,适用于小型和大型应用程序。

萨尼奇

Node 的兴起及其异步编程模型让许多社区感到落后,包括 Python。 作为回应,一系列异步 Web 框架出现在雷达上, 萨尼奇 成为其中一员。

Sanic 深受 Flask 的启发,在某种程度上它借鉴了路由装饰器、蓝图和其他基本原理 hook line 和 sinker。 他们并不羞于承认这一点。 如果您是 Flask 粉丝,Sanic 带来的是真正的非阻塞 I/O,以满足 Node 应用程序的性能水平。 换句话说,Sanic 是支持异步/等待的 Flask!

  使用这 9 个最佳工具构建您的网站站点地图

与 CherryPy 相比,Sanic 具有令人难以置信的性能优势(想想它会如何对抗 Flask!)。 查看以下测试结果 数据编织:

如您所见,一旦并发数开始超过每秒 50 个,CherryPy 几乎会窒息并抛出很高的失败率。

Sanic适合你吗?

虽然 Sanic 的性能特点让其他一切都望尘莫及,但它可能不是您下一个项目的最佳选择。 主要原因是缺少异步库。 现有的大部分 Python 工具和库都是为单线程 CPython 版本编写的,没有考虑到高并发或异步操作。 例如,如果您最喜欢的 ORM 不支持异步操作,那么使用 Sanic 的意义就落空了。

由于这些成熟度和可用性原因,我们将不再研究 Python 中的任何异步框架。

纤维石

不久前我遇到了这个框架,并认为这是朝着正确方向迈出的一步。 自此2.0版本发布,感觉终于到了给的时候 纤维石 一些爱。

简单地说,Masonite 是 Laravel(一个著名的 PHP 框架,如果您不知道的话)的 Python 版本。 为什么这很重要? 这很重要,因为 Laravel 是基于 Ruby on Rails 的原则构建的,并且这两个框架一起允许非 Ruby 开发人员体验“Rails Way”做事。

Laravel(在某种程度上,Rails)开发人员将感到宾至如归,并且几乎可以立即启动并运行。 当我尝试使用 Masonite(并且我确实提交了一两个问题,包括一个错误!)时,我能够完全零思考地构建 REST API,因为我的 Laravel 肌肉记忆可以做所有事情。

作为一个内置电池的全栈框架,Masonite 带来了几个有趣的东西:

  • 活动记录式 ORM
  • 数据库迁移(与 Django 不同,它需要由开发人员创建)
  • 用于依赖注入的强大 IoC 容器
  • 自己的 CLI(称为“craft”)用于脚手架和运行任务
  • 一流的单元测试支持

Masonite 最大的“竞争对手”是 Django,因为社区正在尽最大努力将该框架作为简单、令人愉快的下一件大事来推销。 它是否会超越 Django 是时间会告诉我们的(如果你问我,它确实有一个不错的镜头),但是对于比较两者的讨论,请参见 这里这里.

美森耐适合您吗?

与 Django 相比,Masonite 仍然是一个婴儿,因此无法推荐它超过 Django。 也就是说,如果您喜欢使用 Rails 方式(或 Laravel 方式)做事,您会欣赏 Masonite 提供的功能。 它非常适合快速构建需要预先配置所有内容且易于切换的原型。

结论

不乏大小不一的 Python 框架。 虽然您可以为一个小项目挑选几乎任何东西,但企业应用程序的需求这些框架中的很多都无法满足。 如果你问我,对于企业开发,我会想到 Django(某种程度上)、Zope 和 TurboGears。 即使在其中,我也倾向于 TurboGears。

也就是说,任何称职的架构师都可以选择一个微框架并推出他们的架构。 这几乎就是实践中发生的事情,这解释了 Flask 和类似想法的成功。

如果你是新手,那么 这个在线课程 对学习 Python 很有帮助。

接下来,探索一些用于构建 API 的专用 Python 框架。