针对 Python 中的 全栈框架(Django) 和 微型框架(Flask)行进介绍,对于一些应用特定场景的其他框架做简单的说明~

英文原文:《A Complete Guide to Python Web Frameworks》作者:Premjith B P K

原文链接:https://opensourceforu.com/2019/04/a-complete-guide-to-python-web-frameworks/

Web 框架就是一些函数库,通过使用这些库使得 Web 开发更加简单快捷。Python 作为多功能的编程语言,有许多 Web 框架,像 Django、Web2py、Flask 和 Bottle等等。接下来我们将来介绍这些框架的相关情况。

对于开发 Web 应用程序的团队,Python 是一种主流且非常灵活的编程语言。应用程序以一种模块化的开发模式进行开发,使得开发者和 Web 框架紧密的联系起来。调用框架中提供的大量的解决方案,使得开发者能够更加专注于应用程序的逻辑业务,不再为重复和低优先级的任务所扰。

如今,开发者尝试使用强大功能的 Python 框架去解决解决一些具体的实现细节,这个加速了原型设计和开发的进程。从针对企业的强大全栈框架到适合开发小型专业的工具的超轻量级微框架流,目前有各种各样的流行的 Python Web 框架。

Python Web 框架在很大程度上削减了 Web 应用开发的成本、人力和时间周期。我们将分享这些流行框架中一些重要功能点,帮助在你开发 Web 应用程序中做的更好。我们希望能够帮助你确定针对自己实际需求的最合适框架。

框架的作用

Web 框架使得开发者不需要去关注 Socket、协议 和 线程管理 等细节,专注于 Web 应用程序和服务的开发。框架的完成的大部分职责集中于 cookies 的处理、参数的获取以及 session 的处理等。主流的 Web 框架分为两大类:全栈框架 和 微型框架。

选择全栈框架还是微型框架

当你在框架选择时,你应该将项目规模和复杂性作为考虑的重要因素。如果你希望应用的开发以业务功能为主,需要与其他的周边框架协作,全栈框架的选择将能够减少整个团队在开发时间和开发任务。但是,如果你在开发一个小型、简单需求的少的项目时,微型框架是你最好的选择。另一个需要考虑的问题是:你需要框架帮你完成多少事情?全栈 Web 框架包含了开发一个功能丰富 Web 应用的所有组件—框架生成器、访问列表和模板等。这使得你的团队能根据不同的需求创建出相应的页面和应用。对于希望快速开发出产品的团队这是一个很好的选择,因为这是使得他们更加专注于应用的开发而不是与之相关的周边事情。如果你有复杂的个性化需求或者已经在开发多种不同类型的定制化的软件,不管在什么情况下,你都不应该使用这些框架。

全栈框架

有许多新且完备的全栈 web Python框架选择方案:如主流的框架 TurboGears 2、Pylons 和 Web2py。但是其中最流行的是 Django。

  • Django

    Django 是流程的 Python 框架,至于具体的原因大家不难理解。大量的网站使用了 Django,从出版社到社交媒体和分享网站,再到重要的机构和非盈利组织。由于 Django 最初开发于编辑部门,因此 华盛顿邮报 和 卫报 运行在该框架上也不是意外。一些新公司和初创公司像 Eventbrite 和 Disqus 已经在往 Django 迁移并且在提高完成度。同时社交巨头 Instagram 和 Pinterest 已经使用该框架去开发他们的动态 Web 应用。

    当考虑到框架时,Django 以快速开发 和 对业务开发者友好 而著称。作为一种“可插拔式”的框架,它提供了所有你需要的基础的组件 认证、可渲染模板、ORM 和路由等。相比于其他的主流 Web 框架,它有良好的技术文档。

    通过对大量选择的处理,Django 能够在很大程度上减少新项目的引导时间。但是,在获得速度的同时也牺牲了长期开发维护的灵活性。例如,Django 内置的 ORM 在大部分情况下效果显著。但是,它无法像被称为最好的 Python 数据库抽象工具 SQLAlchemy那样有突破性。你可以想象在 Django 下使用 SQLAlchemy,但是那样你讲失去 Django 中的一些一开始就吸引人的重要功能。

  • Web2py

    Web2py 是另一个主流的全栈框架。需要牢记的是 Web2py 不兼容 Python3。虽然 Web2py 的早期开发者已经保证会去开发兼容 Python3 的新版,但时至今日依然没有新版依然没有正式发布。

    即便相较目前最新发布的 Python 版本已经十年时间了,Web2py 依然在许多大型企业中使用,其中就包括跨国银行。使得这个老 Web 框架依然有许多开发者在使用的原因,是他独一无二的功能。一方面,它即能够像 Django 一样简单易学习,又兼具灵活性和可扩展能力。不管是 AWS 还是 Google App Engine 中 VPS, 同样的一段代码几乎可以应用到 所用的使用 SQL 或者 Mongo DB 的 VPS 中 。

    Web2py 有优秀的文档手册和活跃的社区在其背后作为强大的支持。另一个亮点在于 Web2py 有自己的IDE,其中包含了 代码编辑器、调试器、bug 票务框架 和 单独的票务部署功能等等。如果你的团队在未来几年中开发以 Python2 为主,或者希望充分利用已有的众多 Python 库和应用,那么 Web2py 框架非常符合你的要求。

    Pyramid 确切的来说不是一个全栈的 Web 框架,并且自称是符合“金发姑娘”原则(适度原则)的框架。Pyramid 有这丰富的特性不会限制使用某种特定的方式去处理事情。作为一种轻量级的框架,不会使你随着应用的开发陷入独自一人的窘境。由于良好的通透性和模块化,Pyramid 是 Python 老鸟最喜爱的开发框架。不仅中等规模的团队在使用,像 Mozilla、Yelp、SurveyMonkey 和 Dropbox 这样的科技巨头也在使用。

    事实上,Pyramid 框架中几乎所有的组件都能够替换掉。你能够使用你的数据库接口,甚者连接任何你想要连接的数据库。它不会像Django那样授权处理具体的选择,也不鼓励自动化处理具体任务的奇妙功能。这使得它不会表现预期的或者吸引人的方式。

    Pyramid 流程的原因是它安全的解决方案,使得访问控制记录的创建和检查变得简单。另一个值得关注的创新功能是 Pyramid 的从 URL 到 code 的映射的路由系统,这使得最终创建 RESTful 接口变得容易。

微型框架

考虑到你可能不需要全面和丰富的全栈框架。如今,新一代的 Web 应用需要许多可以插拔的部分,包括数据库抽象层,框架认证 和 可配置的访问控制规则。但是也有大部分的 Web 应用不要这些模块。对于这种项目,微型框架应该是最需要的。

这些超轻量级的应用被开发的目的是使得一些死掉的 Web 应用重新能被使用并且尽可能的运行的更快。他们的设计的功能精简—————— 对一些能通过安装一些其他的库满足的功能专门进行了移除。使用这些透明的方法的好处是使你的代码更加的简洁清晰,并且网站运行速度更快。这就是为什么微型框架没有全栈框架那么抽象。相比于对初学者友好的 Web 框架,你编写的代码将需要触及HTTP 的一些功能。

  • Flask:

    Flask 无疑是最有名的 Python 微型框架,并且一直是最有名的 Python 结构中的佼佼者。和 Django 一样,开发 Flask 的目的是使得 Web 应用开发并尽可能运行的更快。虽然是微型框架,但 Flask 已经被一些大公司所使用,其中包括 LinkedIn 和 Pinterest。

    无论如何,这是个较量。相比 Django,Flask是那些又小又简单项目的理想选择。因此,你可以期待 Web 服务器开发将支持 Google App Engine 并且 内置单元测试功能。Flask 不支持 数据库抽象层 和 表单验证,且自动上传的功能被禁用。但是,每一个这些功能都能够通过外部扩展来实现。例如一些主要的扩展包括 SQLAlchemy 数据库 、 Jinja2 模板和 CouchDB。

    一些 Python 开发者会选择 Flask 而非 Django ,因为前者越来越 Pythonic。这更加符合 Pytho 之禅的原则:一种方式完成事情,并且相应的代码能够表明在做什么。如果你非常想要从头开始使代码更加简洁明了,Flask 应该是你合适的选择。

  • Bottle:

    Bottle 是另一个主流的微型框架。它从一开始就是为创建 Web API 而生,这也是它最好的使用案例。Bottle 更加奇妙的地方在于,它尝试使用一个单一的文件做所有的事情,这给我们一个重要的认识:它的设计是多么的 micro。

    Bottle 包含一些开箱即用的功能包括 模板、路由、应用程序 和 一些在 WSGI 标准上的基础抽象。和 Flask 一样,有你的编码将更接近底层相比于全栈框架。尽管如此,Bottle 已经被 Netfilx 用于创建 Web 接口。

其他一些流行的框架

我们已经介绍了许多广泛使用的 Python Web 框架,你可以从中有不同的选择。接下来将了解一些在特定情况下表现优良的其他框架。

Tornado 是专为解决 C10k 问题而开发的 Python Web 框架。(在正确配置下,它能够通过异步 I/O 处理超过 10,000 并发连接数)这个对于那些需要高质量且大量并发用户的项目是一个巨大的吸引力。

CubicWeb 是一个奇妙的 Web 框架,它完全不同其他的 Web 框架。它是语义 Web 的一种,用外行人的话将,它是一个通过减少对于电脑系统性能要求的方式来显示信息的系统。它使用一个单独的概念替代了 MVC 模型中的 model 和 view ,即数据块———能够由于开发不同的组件,有点像 Web 上的 Docker。

Phalcon 是一个专注于创建云 API 的微型框架。和其他微型框架一样,它保持的较少的依赖,并且与复杂功能保持着一个明智的距离。但是,不同于其他框架,它不是为 HTML 的页面而开发的,而是,为更快的创建 RESTful API 而生。

即便 Android 有非常优秀开箱即用的 SDK ,但使用 Python 实现替代 Java 实现有着巨大的好处,对于网站和应用开发(使用 Kivy 移动应用开发的 Python 开源库 )。因为 Python 提供了更快的时间转化和库的复用。

Python 作为一个可靠、安全的开发语言,被用于安全敏捷 Web 应用的开发。作为可靠备选中的佼佼者,它减少了顶尖稳定 Web 应用和网站的开发周期。你可以在开发你的下一个项目时,咨询有经验的 Python 开发人员,以得到更好的指导。