详说Flask、Django、Pyramid三大主流 Web 框架

时间:2020-12-21 16:57:34

前言

目前随着 Python 在大数据、云计算、人工智能方面的热度,Python Web 应该也会被更多企业了解使用。
Python Web 框架千万种,没必要都去了解和学习,身边总有人说高手都用 Flask 或者 Tornado。其实
这个东西仁者见仁智者见智,没有必要褒贬,在我看来 Flask 就像是 Android 系统灵活、扩展性强,
Django,像是 IOS 系统整体生态相对封闭
。虽然框架没有高低之分,但是他们都有各自专注的应用场景,
经常听身边的人说 Tornado 性能多么多么的高,但是我一点都不感冒,也不了解所以就不说它了,
接下来我想说说我用过和了解过的: Flask、Django、Pyramid

对于 Pyramid 可能有些人不大了解,先百科一下 Pyramid

Pyramid:Pyramid 也是站在巨人肩膀上的框架,借鉴于 Zope、Pylons 1.0、Django
第一个 Pyramid 版本名为 repoze.bfg 创建于 2008 年。2010 年末,更名为 Pyramid 并于同年11月份合
并到 Pylons 项目中。

简介

Flask 属于微框架,专注轻快,主要面向需求简单的小应用。Pyramid 和 Django 都是面向大的应用,但是
在扩展性和灵活性上走了不同的路。Pyramid 注重灵活性,毕竟是站在巨人肩膀上的框架,吸取了其它框架
优点的,让开发者选择合适的工具来开发项目。这意味着开发者可以选择数据库,URL结构,模板风格等等。

Django的目标是提供 Web 应用开发的一站式解决方案,所以相应的模块有很多。Django 包含了一个 ORM 模块,
而 Pyramid 和 Flask 是让开发者来选择如何存储数据。针对非 Django 框架的最流行的ORM目前是SQLAlchemy,
也有很多其他的选择,比如 DynamoDB 和 MongoDB,不过还有 LevelDB 和 SQLite 这样的简单本地持久化。
Pyramid 可以使用任何持久层,甚至是还没做好的。

我的学习原则是:学习与需求匹配,一般有两种方式

  • 学习一个东西之前评估学习它的价值,

  • 有需求现学现用

虽然这种获取知识的方式,很有局限性,但是我又是很懒的一个人,不愿意看不到价值地去学习一些东西。
在学习 Python 之前对一些 Web 框架做了一些了解,在 Github 上看到了一个 Flask、Pyramid、Django 框架
实战的对比 Demo,如果你是和我一样不喜欢理论,只追求实战的可以移步 Github

关于框架

Django 的一站式解决思路让开发者不用在开发之前不用在项目构建上花费大量的实践。Django 有模板,
表单,路由,认证,基本的数据库管理等等内建功能。Pyramid 虽然包含路由和验证,但是模板和数据库
管理需要第三方库。用 Flask 和 Pyramid 来构建应用之前,选择组件的时灵活性更大。可能有的应用场景
不适合使用一个标准的ORM,或者需要与不同的工作流和模板系统交互。

Flask,是这三个框架中最年轻的,创始于2010年。Pyramid 框架来源于 Pylons 项目,在2010年末更名为Pyramid,
它最早发布与2005年。Django发布于2006年,就在Pylons项目之后。Pyramid 和 Django 是非常成熟的框架,积累了
大量的插件和扩展来满足不同需要。尽管 Flask 的历史较短,但它能够从以前的框架学到一些东西并且将它的目标
设定在了小型项目上。它在一些仅有一两个功能的小型项目上得到了大量应用。

社区活跃度

在 * 上Django的相关问题远远甩开 Flask、Pyramid 几条街,不过 Django 和 Flask 的 Stars 量比较接近

总结

Pyramid 在这三个框架里是最灵活的。它可以用来写小的应用,它也能来支持像Dropbox这样大名鼎鼎的网站。
像Fedora这样的开源社区选择它来做一些应用, 比如他们的社区badges_system,它会获取关于很多项目工具的
事件来给用户颁发成就奖。对 Pyramid 最多的抱怨是它有如此多的选择,在开始新项目的时候可能会有点纠结。

目前最流行的框架是Django,有一堆网站用它。有Bitbucket、Pinterest、Instagram、The Onion来完成网站
功能的全部或一部分。对于一些有普遍需求的网站,选Django是非常理智的,因为它对于中到大型的web应用
是个非常流行的选择。

Flask适合开发者用最快的速度做一个简单的,Python做后端的网站。它适合一些一次性的工具,或者一些基于
现有API的简单web应用。需要一个简单的web接口的后端项目可以开发的很快,一些需要少量配置的应用可以在
Flask的前端上受益,比如jitviewer ,它就可以提供web接口来查看 PyPi的即时编译日志。这三个框架都对一
些需求提供了解决方案,我们可以来看看它们的区别。有些区别不仅仅是表面的,它会影响你如何设计产,多快
能实现特性并且修复问题。因为我们的例子都很小,我们可以看到在小规模项目的时候,Flask非常棒,而Django
就有点笨重了。Pyramid 的灵活性没有成为一个要素,因为我们的需求是一样的,但是现实中的需求都是非常随机的。

推荐阅读