本文概述
- Django
- Flask
- Bottle
- Zope
- TurboGears
- Web2py
- CherryPy
- Sanic
- Masonite
爱好者, 科学家和建筑师都喜欢Python。
它非常容易上手, 具有较高阶的抽象和元编程功能, 可以构建大型和复杂的系统, 并且有大量的库可用于执行几乎所有操作。当然, 在并发性和强类型化方面存在一些限制, 但是你可以解决它们。
在本文中, 我们将介绍构建大型和小型Web应用程序时最好的Python框架。
Django Django框架经受住了时间的考验, 成为了Python社区的首选Web框架。如果你在睡觉时殴打了一名Python开发人员, 并强行要求他们构建Web应用程序, 那么他们将像Rubyist达到Rails的方式自动到达Django。
文章图片
这是有充分的理由的。正如标语所说, Django是” 一个有期限的完美主义者的Web框架。” 这就是所谓的” 含电池” 框架(非常类似于Python是含电池的语言), 它提供了所有现成的常用功能。
有了这些功能, Django大大减少了开发时间:
- 一个方便, 令人愉快的ORM, 该迁移由框架自动创建和应用。
- 脚手架可根据你的模型自动生成管理面板。
- 支持cookie, 会话, 中间件, 模板等。
- XSS防护, CRSF防护等安全功能会自动应用。
- 几乎可以与所有数据库一起使用(很容易找到不存在官方支持的适配器)
- 通过GeoDjango提供对地理数据和空间查询的一流支持
【9种构建小型企业应用程序的最佳Python框架】是Django吗?
绝对没错。
Django对于所有用例都非常有意义, 无论是快速原型设计还是计划企业应用程序。你会遇到的唯一困难是框架的结构。由于Django向后弯腰以使你快速而轻松地进行开发, 因此Django将其结构(称为” 配置之上的约定” 的概念)强加给开发人员, 你可能会不同意。例如, 如果你想用其他东西(例如SQL Alchemy)替换Django ORM, 请做好准备以防意外。
有兴趣成为Django和Python的全栈开发人员吗? –看看这个很棒的在线课程。
Flask 尽管Django几乎占据了Python Web开发的全部精力, 但Flask是一个强有力的竞争者。
文章图片
与Django相反, Flask是一个” 微框架” , 这意味着它专注于正确处理一些最低限度的内容, 而剩下的则留给你。取决于你的目标, 这种” 剩下的取决于你” 可能会导致沮丧或高兴。对于那些知道自己在做什么并且想要通过选择自己喜欢的组件来精心制作Web应用程序的人来说, Flask是天赐之物。
Flask提供以下功能:
- 路由, 模板, 会话管理和其他有用的功能。
- 全面支持单元测试
- 最小的可插拔架构
- 一流的REST支持
- 支持蓝图, Flask针对小型Web应用程序的独特架构
- 选择用于ORM, 迁移等的软件包。
- 灵活的应用程序结构-将文件放在最适合你的位置
- 静态文件投放
- 符合WGSI
如前所述, Flask是一个最小的Web框架, 所有内容都分解为可以交换的单个组件。如果你急于构建原型, 则将花费大量时间在数据库, 文件夹结构, 路由等方面做出微不足道的决定, 这可能会适得其反。当你着手进行稳定, 认真的中型到大型项目, 尤其是REST API时, Flask效果最佳。
Bottle 如果你认为Flask的方法不够精简, 并且仍然希望获得更多控制权, 请向Bottle打个招呼。
文章图片
Bottle甚至可以剥离更多的东西, 以至于唯一的依赖就是Python标准库。这意味着你无需进行任何点子安装或点子安装, 尽管你很可能需要不久。这就是Bottle在某些人中脱颖而出的原因:
- 单文件部署。是的, 你的整个应用程序都保存在单个” .py” 文件中。
- 没有外部依赖性。如果你安装了正确的Python版本, 那就很好了。
- 提供其模板引擎, 可以与Jinja2, Mako或Cheetah互换。
- 支持表单, 标题, Cookie和文件上传。
- 内置的Web服务器, 可以轻松更换。
如果你制作的应用程序非常小(例如, 少于500行代码)且没有特殊要求, 那么Bottle对你可能很有意义。这是创建Web应用程序的一种完整的废话, 但是在实践中, 你会发现比Bottle帮到你的困难更大。原因是现实世界一直在变化, 并且在你不知道之前就在变化。新的要求将落在你的头上。那时, 将所有内容放在一个文件中将变得很麻烦。
另外, 如果你认为Bottle和Flask差不多, 那是对的。合并两者的提议可追溯到2012年, 甚至Flask的创建者Armin也同意这一观点。但是, Bottle的创建者Marcel坚持严格的意识形态区分, 因为它采用的是单文件方法, 并坚持认为两者应保持独立。
Zope Zope的解释很复杂, 但我会尝试。是的, 它是一个Web框架, 可用于构建大小应用程序, 但这还不是全部。 Zope更像是一个平台, 包含根据Zope理念创建并由Zope Corporation维护的工具(包括Web框架)。
文章图片
Zope具有一些有趣的组件和功能, 适用于企业应用程序开发:
- 组件注册和发现架构, 用于配置大型应用程序。
- ZODB —(唯一的)Python对象数据库, 用于本地存储对象。
- 内容管理系统的完整框架和标准
- 一组Web应用程序框架—规范的Web应用程序框架仍称为Zope, 尽管已在其之上构建了几个新框架(例如Grok)。
- 软件开发, 发布和维护的强大标准。
如果你需要一个高度结构化的环境来构建大型应用程序, 则Zope很好。也就是说, 你也会遇到很多问题。在Zope不断发展的同时, 社区实际上很小, 以至于许多Python开发人员甚至没有听说过它。查找教程和大量文档非常困难, 因此请做好很多挖掘工作的准备(尽管社区确实很有帮助!)。另外, 你遇到的Python开发人员可能不想学习Zope并” 淡化” 他们的技能。
TurboGears TurboGears是一个高度灵活的框架, 具有真正可组合的架构。该框架可以根据你的需求进行扩展, 你可以使用它来构建单文件应用程序或多租户庞然大物。
文章图片
TurboGears具有一些优雅的功能, 其中一些不流行的框架(如Django)中不存在, 或者难以构建:
- 对多个数据库的一流支持
- 多数据库交易
- 高度模块化-从单个文件开始, 然后根据需要扩展
- 强大的ORM(SQLAlchemy, 比DjangoORM更成熟, 功能更强大)
- 基于WSGI规范的可插拔体系结构
- 内置对数据库分片的支持
- 一个功能驱动的界面, 而不是深入的, 刚性的面向对象的层次结构。
如果你想快乐地发展, 并且想要一个经过测试, 成熟且强大的框架来摆脱” 令人敬畏的下一代” 等所有媒体的干扰, 那么TurboGears非常适合。它在社区中备受推崇, 并拥有完整而广泛的文档。当然, TurboGears并不固执己见, 这意味着初始设置和配置时间可能会更多, 但这是企业应用程序开发的理想框架。
Web2py Web2py最初是一个业余项目, 于2007年发布。其目标是使每个人都可以轻松访问Web开发。
文章图片
结果, Web2py将零依赖方法带到了极致—它没有要求, 没有安装, 并且包括用于开发, 数据库管理和部署的功能齐全的基于Web的编辑器。
文章图片
你几乎可以将其视为Android Studio, 它不仅仅是一个框架, 更是一个完整的环境。 Web2py具有的一些不错的功能是:
- 几乎没有学习曲线。
- 最小的核心(只有12个对象), 甚至可以记住!
- 纯Python模板
- 防御XSS, CSRF和其他攻击
- 令人愉快且一致的API
Web2py是一个稳定且有趣的框架, 但很难将其推荐给Django, Flask等其他选项。几乎没有任何工作, 并且单元测试的故事也不是很好。也就是说, 你可能会喜欢代码API和框架提供的整体体验, 尤其是在构建REST API时。
CherryPy CherryPy是另一种微框架, 旨在提供基本框架功能并快速摆脱困境。
文章图片
虽然与Flask等其他微框架相比, CherryPy具有一些区别:
- 它包含一个内置的多线程服务器(仍然存在于Flask的愿望清单中)
- (单个)Web服务器可以托管多个应用程序!
- 将你的应用程序作为WSGI应用程序(以与其他WSGI应用程序接口)或纯HTTP服务器(性能更好)进行服务
- 一流的性能分析和单元测试支持
- 在PyPy(用于真正的性能迷), Jython甚至Android上运行
CherryPy适合你吗?
如果你主要是在构建RESTful服务, 那么CherryPy比Flask更为重要。这是一个已有十年历史的框架, 已经很好地成熟了, 适用于各种大小的应用程序。
Sanic Node的兴起及其异步编程模型使包括Python在内的许多社区感到落后。作为响应, 一连串的异步Web框架出现在了雷达上, Sanic就是其中之一。
文章图片
Sanic受到Flask的极大启发, 在某种程度上, 它借鉴了路线装饰器, 蓝图和其他基础知识。而且他们并不以为耻。如果你是Flask迷, Sanic可以带给你的是真正的非阻塞I / O, 可满足Node应用程序的性能水平。换句话说, Sanic是Flask的async / await支持!
与CherryPy相比, Sanic具有令人难以置信的性能优势(只要考虑一下与Flask的竞争优势!)。查看由DataWeave测试的以下结果:
文章图片
文章图片
如你所见, 一旦并发数开始超过每秒50个, CherryPy实际上会阻塞并引发很高的故障率。
Sanic适合你吗?
尽管Sanic的性能特点让其他一切无所适从, 但对于你的下一个项目而言, 它可能不是最佳选择。主要原因是缺少异步库。现有的大部分Python工具和库都是为单线程CPython版本编写的, 没有为高并发性或异步操作而做的准备。例如, 如果你最喜欢的ORM不支持异步操作, 则使用Sanic的整个要点都会失败。
由于这些成熟度和可用性的原因, 我们将不再研究Python中的任何异步框架。
Masonite 不久前, 我遇到了这个框架, 并认为这是朝正确方向迈出的一步。从那时起, 2.0版就发布了, 我觉得现在终于该给Masonite一些爱了。
文章图片
简而言之, Masonite是Laravel的Python版本(一个著名的PHP框架, 如果你不知道的话)。为什么这么重要?这很重要, 因为Laravel是基于Ruby on Rails的原理构建的, 并且这两个框架一起使非Ruby开发人员可以体验做事的” 轨道方式” 。
Laravel(在一定程度上是Rails)开发人员会感到宾至如归, 并且几乎可以立即启动并运行。当我尝试Masonite时(确实提交了一个或两个问题, 包括一个bug!), 我能够以零思考的方式构建REST API, 因为我的Laravel肌肉记忆正在做所有事情。
作为包含电池的全栈框架, Masonite带来了一些有趣的东西:
- 活动记录样式ORM
- 数据库迁移(与Django不同, 它需要由开发人员创建)
- 强大的IoC容器, 用于依赖注入
- 自己的CLI(称为” 工艺” ), 用于脚手架和运行任务
- 一流的单元测试支持
是Masonite的吗?
与Django相比, Masonite仍然是婴儿, 因此无法推荐使用Django。就是说, 如果你喜欢Rails的方式(或Laravel的方式), 那么Masonite会提供什么。非常适合快速构建需要预先配置且易于切换的原型。
总结
大小不一的Python网络框架不乏其人。尽管你可以为一个小型项目获得几乎所有东西, 但是企业应用程序要求这些框架中没有很多可以满足。如果你问我, 对于企业发展而言, Django(一定程度上), Zope和TurboGears是我想到的。即使在其中, 我也倾向于TurboGears。
话虽如此, 任何值得他精打细算的建筑师都可以拿起微框架并推出他们的建筑。这几乎就是实践中发生的事情, 这说明了Flask和类似想法的成功。
如果你是新手, 那么此在线课程将对学习Python有所帮助。
推荐阅读
- 你应该知道的10个最佳JavaScript框架
- 初学者的区块链介绍
- 如何成为前端开发人员(2020版)()
- 适用于前端开发人员的10个最佳CSS框架
- Python字典深入理解教程
- 7个用于应用程序快速开发的最佳AngularJS框架
- Python脚本|如何用 python 破解加密压缩包?
- LeetCode|117. Populating Next Right Pointers in Each Node II刷题笔记
- python|Python-JSON应用json库