Python的框架比较:Django,金字塔,水瓶,Sanic,旋风,BottlePy等等

Python框架可以分为几个领域,因为Python是一种非常多样化的语言,可以在各个领域中使用。每个领域都有自己的框架,其中一些比其他更受欢迎。Python应用于Web开发是最流行的领域之一,我们今天将重点讨论这个领域。

提供的框架可以分为三类:完整的堆栈框架,它为服务器和客户端提供了很多现成的功能;微框架,它提供服务器端支持(有时,它们可以扩展到客户端),并且允许只使用一个单独的工具就可以创建一个web应用程序。文件;最后,异步框架,异步处理请求。 .

如果你对编程感兴趣,想学习Python,这里推荐一下我的:Python学习交流群【 784758214 】内有安装包和学习视频资料免费分享,好友都会在里面交流,分享一些学习的方法和需要注意的小细节,希望可以帮助你快速了解Python,学习python

全栈web框架

姜戈

Django是最流行的Python框架之一。 。它提供了许多开箱即用的功能,如AdminPanel或泛型视图和表单。Django的主要特点是:

  • 一个管理脚本(“Manage.py”),可用于执行大多数特定于框架的操作(例如启动开发服务器、创建管理用户、收集静态文件等),

  • 同步请求处理,

  • MTV(模型-模板-视图)体系结构模式(这是模型-视图-控制器模式的变化),

  • 用于与数据库通信的自定义对象-关系映射(ORM),

  • 函数和类用于视图上下文创建和操作处理,

  • Django非常严格,并且在开发人员身上强制使用了自己的编码风格-很多元编程,

  • 非常好的,广泛的文档和例子,

  • 自定义HTML模板呈现引擎,

  • 自定义URL路由系统,

  • 遵守WSGI标准,

  • 支持静态文件-URL路由以及检测和收集,

  • 大量外部模块,例如Django REST框架、Django CMS、Django通道( WebSocket ).

Django非常适合更大的项目,在这些项目中需要大量的后端和前端支持,或者在时间起关键作用的情况下,因为Django提供了大量现成的组件。Django中的编码主要依赖于自定义代码的通用部分。开发人员必须遵循一组随给定元素而来的规则。对于需要大量代码灵活性的项目,Django可能不是最佳选择。

37,514 GitHub 星星/ 183,588 StackOverflow 问题

Web2py

Web2py侧重于安全性、开发速度和易用性。它提供了许多现成的特性:Web服务器、数据库、管理面板、wiki或网格小部件。框架的主要特点是:

  • 同步请求处理,

  • 自定义数据库抽象层(DAL)充当ORM,

  • 强制MVC结构,

  • 函数和类可用于创建控制器,

  • 严格“ 应该只有一种方法来做“哲学”,

  • 丰富的文档和大量的例子,

  • 允许在模板中使用Python代码的自定义HTML引擎,

  • 自定义路由-URL函数,它为操作和静态文件生成内部路径,

  • 支持WSGI标准,但可以使用CGI(公共网关接口)、FastCGI、GAE(GoogleAppEngine)或其他

  • 在开发过程中提供静态文件路由和流,

  • 有内置的REST服务,但需要使用“旋风”框架来使用Web套接字。

Web2py深受鼓舞 Ruby on Rails 和 姜戈 框架并从它们中获取最好的东西。对于想要从Ruby迁移的程序员来说,或者对于那些对Django感到厌烦但正在寻找另一个功能丰富的框架的程序员来说,这是一个很好的选择。它提供了一个“admin”应用程序,它充当了一个基于web的IDE,用于应用程序开发和管理(例如,应用程序创建、代码编辑器)。它也得到PyCharm的支持。一般来说,Web2Py并不缺乏Django所拥有的任何功能。这两个框架可以用来完成同样的任务。Web2Py更年轻,它的社区比Django更小,因此在遇到麻烦时可能更难找到帮助。

1,665 GitHub 星星/ 2,004 StackOverflow 问题

涡轮齿轮

TurboGears将许多外部服务连接起来,以创建一个功能框架:

  • 同步请求处理,

  • 模型-视图-控制器(MVC)模式,

  • 使用SQLAlchemyORM,

  • 允许使用函数和类视图上下文生成,

  • 它提供了一些现成的通用类(非常有趣的RESTAPI创建APIController),

  • 文档有点混乱,但这可能是一个适应它的问题,

  • 使用Kajiki模板语言,

  • 自定义URL路由/调度方法,

  • 符合WSGI标准,

  • 支持静态文件路径配置。

  • 可以通过其他模块进行扩展,例如,用于支持Web套接字的马戏团和卡乌塞特。

这个框架不像它的两位前辈那么流行,但还是值得一看。

259 GitHub 星星/ 107 StackOverflow 问题

微框架

烧瓶

是其中之一 最受欢迎 Python微框架,它是可靠和快速的。据说它是作为一个笑话创造出来的。该框架的主要特点是:

  • 同步请求支持,

  • 不强制任何项目架构,但有一些建议(包、模块、蓝图),

  • 它不提供ORM,但可以使用SQLAlchemy或其他

  • 支持函数以及一些类似Django的泛型类视图(从Flask 0.7开始),

  • 松散的编码风格,它不强制任何解决方案,大多数决策由开发人员自行决定,

  • 好的文档和例子,

  • 可以使用Jinja 2 HTML模板引擎,

  • Werkzeug路由系统

  • 符合WSGI标准,

  • 支持基本的静态文件路由,

  • 可以通过一些额外的第三方模块进行扩展,例如用于RESTAPI创建的Flask-RESTful或支持WebSocket的烧瓶-Socketio。

这个框架将在中小型项目中发挥作用。它有一些可供使用的第三方模块以及良好的本地解决方案。在需要复杂的自定义特性的作业中,烧瓶应该证明自己,但是Django看起来太大了。另一方面,从一开始就为一个更大的项目设置水瓶座可能是很棘手的,因为没有“官方”的方式这样做。

39,946 GitHub 星星/ 24,512 StackOverflow 问题

金字塔

金字塔从最小的安装开始,可以在需要时进行扩展。值得注意的是,这是  该项目整合了与网络相关的技术。这些是金字塔最重要的特征之一:

  • 提供同步请求处理,

  • 视图上下文可以用函数和类来定义,

  • 没有特定的ORM,但建议使用SQLAlchemy,

  • 不会强迫任何编码风格或项目架构- TIMTOWTDI ,

  • 提供了很好的教程和示例文档,

  • 没有交付特定的HTML模板引擎,但是 变色龙 被推荐,

  • 一个有趣的自定义路由系统允许多个视图匹配一个URL,

  • 是符合WSGI的,

  • 广泛的静态文件支持-文件服务,静态文件的URL路由,

  • 可以用外部模块进行扩展。 科尼斯 对于REST API, 金字塔 提供异步支持。

当您不想花时间学习定制框架解决方案(如ORM)但仍然需要一个构建软件的广泛工具时,这个框架可能是一个很好的选择,因为金字塔支持使用许多著名的独立解决方案。它有很好的扩展能力-宣传自己是一个框架,可以“从小到大”。

2,974 GitHub 问题/ 2,060 StackOverflow 问题

CheeryPy

允许以与面向对象Python项目相同的方式创建Web应用程序。它没有完全堆栈功能,也不强制使用任何特定的解决方案-开发人员可以决定如何解决开发过程中出现的问题。CheeryPy的特征如下:

  • 提供同步请求支持,

  • 不会强迫任何项目结构或架构,

  • 不提供任何ORM,但可以使用SQLAlchemy或SQLObject,

  • 不提供任何HTML模板引擎,

  • 有一种松散的编码风格,

  • 提供像样的文件,

  • 路由系统 路线 (Python版本的 钢轨 路由系统)可以使用,

  • 符合WSGI,

  • 对静态文件有很好的支持-允许为文件或整个文件目录提供服务,

  • 允许只使用内置工具创建RESTAPI,

  • 通过 Ws4py 模块。

CherryPy的主要优点是它附带了一个可生产的WSGI服务器,这消除了在部署期间设置外部服务器的必要性。这个框架的主要缺点是它不太受欢迎,因此它有较少的外部模块和一个不那么活跃的社区。

829 GitHub 星星/ 1,244 StackOverflow 问题

BottlePy

这是另一个宣传自己快速和简单的微观框架。值得注意的是,BottlePy是作为一个模块交付的,没有附加的依赖项。特点:

  • 实现同步请求处理,

  • 提供自定义HTML引擎,但可以使用其他引擎,如Mako、Jinja 2或Cheetah,

  • 不提供ORM,但可以使用外部解决方案,例如SQLAlchemy或Macaron,

  • 不会强迫任何项目架构,

  • 提供足够的文件,

  • 有一个自定义的路由系统,但是可以使用Werkzeug路由系统(通过 酒瓶 ),

  • 实现WSGI标准,

  • 提供基本的静态文件路由,

  • 提供小提款(连同 格列 )作为异步请求处理解决方案,

  • 可以在没有外部模块的情况下创建RESTAPI-支持JSON客户端数据。

由于它的体积很小(只有一个文件),并且不需要外部依赖(仅限Python标准库),因此对于希望开始学习Web开发的初学者来说,它是一个很好的选择。对于非常小的站点或一次性测试,它也可能做得很好。BottlePy并不是中型或大型项目的最佳选择,因为它需要一些工作才能达到更重的框架启动阶段。

5,795 GitHub 星星/ 1,288 StackOverflow 问题

异步框架

Aiohttp

它是一个广泛的异步Python框架。它提供了一个具有中间件、信号、优雅关闭等功能的服务器:

  • 异步请求处理、客户端和服务器WebSocket

  • 可以用 吉诺 异步ORM

  • 支持函数和基于类的视图,

  • 有足够的文件,但有点难以浏览,

  • 可以使用纯SQLAlchemy,但建议使用Gino作为异步包装器,

  • 支持Postgres、MySQL、Redis异步驱动程序,

  • 没有开箱即用的模板引擎,但是Jinja 2或Mako可以应用,

  • 定制路由系统,

  • 没有WSGI的支持

  • 支持静态文件的路由,

  • 许多第三方模块可以进一步扩展框架。 apispec 对于RESTAPI的创建, aiohttp-安全 对于用户身份验证和权限。

由于它提供了许多现成的功能(例如支持客户端和服务器端、WebSocket、中间件、信号),所以Aiohttp可能用于中等规模的项目(甚至更大的项目)。

6,378 GitHub 星星/ 503 StackOverflow 问题

萨尼奇

Sanic是一个非常像烧瓶的框架:它很小,很自由,给开发人员留下了很大的空间。它的主要定义特征是它的速度。以下是其他一些特点:

  • 对异步请求处理程序的支持,

  • 不提供任何数据库接口,但是 吉诺 可以安装异步ORM,

  • 提供函数和类作为视图上下文的来源,

  • 编码风格相当松散,非常类似于水瓶,

  • 与“readthedocs”一起交付的文件,

  • Jinja 2 HTML模板引擎可以使用,

  • 定制的路由系统,

  • 默认情况下,WSGI不是兼容的,而是第三方模块( 卫生调度员 )可以安装来支持它,

  • 有基本的静态文件路由,

  • 可以通过其他模块进行扩展,例如: 卫生渣 用于RESTAPI创建。

如果您已经有了使用Flask的经验,那么选择Sanic应该是一个很好的决定,因为这两个框架有很多共同之处。Sanic提供默认的配置处理,而 艾奥赫特 前面提到过,用户需要自己去做。它有一些有趣的第三方模块,如请求速率限制器或 图形QL 整合。

10,625 GitHub 星星/ 58 StackOverflow 问题

龙卷风

龙卷风是一个PythonWeb框架和异步网络库,最初是在FriendFeed(一个社交聚合站点)上开发的。多亏了这一点,它提供了与google、facebook和twitter等社交服务的内置集成。与其他框架和库的集成也是可能的:扭曲的、异步的,甚至是WSGI应用程序。龙卷风的特征:

  • 提供了许多可用于创建应用程序的泛型类,例如,用于WebSocket的路由器或SocketHandler,

  • 自定义HTML模板引擎,

  • 清晰易懂的文件,

  • 函数和类可用于定义操作和处理请求,

  • 自定义路由处理-提供可用于创建路由的泛型类,

  • 它支持WSGI,但不推荐-用户应该使用自己的接口,

  • 开箱即用的WebSocket支持、身份验证(例如通过Google)和安全特性(如cookie签名或XSRF保护),

  • 不需要其他工具来创建RESTAPI。

如果有大量可以快速处理或实时解决方案(例如聊天)的传入连接,框架应该能很好地工作。龙卷风试图解决 C10k问题 因此,高处理速度是一个优先事项。“旋风”的另一个优势是其对社会服务的本地支持。对于创建标准CRUD站点或大型业务应用程序来说,这个框架并不是一个很好的选择,因为它的设计并不是以这种方式使用的。对于较大的项目,它可以与WSGI应用程序集成,作为其更大结构的一部分,并处理需要高处理速度的任务。

16,768 GitHub 星星/ 3,263 StackOverflow 问题

摘要

上面介绍的Web框架只是一个更大更广泛的Python框架家族中的一小部分。每一种解决方案都有其优点和弱点,与其他所有问题一样,没有任何完美的匹配办法可以解决每一项给定的任务。选择框架时必须回答的最重要问题是需要解决的问题。如果服务器和浏览器端需要广泛的支持,那么完整的堆栈框架可能是一个不错的选择。对于较小的项目,或者在编写代码的灵活性是优先考虑的地方,微框架可能是可行的。在请求处理速度扮演重要角色或项目必须处理长响应时间的情况下,异步框架应该起作用。

猜你喜欢

转载自blog.csdn.net/weixin_42209553/article/details/84944663