前言

目前随着 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 的历史较短,但它能够从以前的框架学到一些东西并且将它的目标
设定在了小型项目上。它在一些仅有一两个功能的小型项目上得到了大量应用。

社区活跃度

在 StackOverflow 上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 的灵活性没有成为一个要素,因为我们的需求是一样的,但是现实中的需求都是非常随机的。

推荐阅读

详说Flask、Django、Pyramid三大主流 Web 框架的更多相关文章

  1. Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)

    摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...

  2. Flask(1)- 主流web框架、初识flask

    一.Python 现阶段三大主流Web框架 Django.Tornado.Flask 对比 Django 主要特点是大而全,集成了很多组件(例如Models.Admin.Form等等), 不管你用得到 ...

  3. python三大主流web框架之Django安装、项目搭建

    这一篇我们将迎来python强大的web框架Django,相信大家都已经不陌生,本篇将介绍Django的安装及基础项目搭建,大神略过~ Django是需要我们手动pip安装的,首先我们来安装Djang ...

  4. day 52 Django基础一之web框架的本质

    Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...

  5. day 65 Django基础一之web框架的本质

      Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基 ...

  6. 6 大主流 Web 框架优缺点对比:15篇前端热文回看

    摘自:http://blog.csdn.net/VhWfR2u02Q/article/details/78993079 注:以下文章,点击标题即可阅读 <6 大主流 Web 框架优缺点对比> ...

  7. Django-手撸简易web框架-实现动态网页-wsgiref初识-jinja2初识-python主流web框架对比-00

    目录 自己动手实现一个简易版本的web框架 手撸一个web服务端 根据请求 url 做不同的响应处理 基于wsgiref模块实现服务端 用wsgiref 模块的做的两件事 拆分服务端代码 支持新的请求 ...

  8. Django学习篇(web框架的由来)

    Python的WEB框架有 Django.Tornado.Flask 等多种 ,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多 ...

  9. django基础一之web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

随机推荐

  1. JS播放声音 兼容所有浏览器

    JS播放声音 兼容所有浏览器 <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http ...

  2. linux中ftp配置文件详解

    vsftpd配置文件采用"#"作为注释符,以"#"开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的"="两边不要留 ...

  3. 最长上升子序列(LIS)

    最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS.排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个序列d[1..9] = ...

  4. Hadoop编码解码【压缩解压缩】机制详解(1)

    想想一下,当你需要处理500TB的数据的时候,你最先要做的是存储下来.你是选择源文件存储呢?还是处理压缩再存储?很显然,压缩编码处理是必须的.一段刚刚捕获的60分钟原始视屏可能达到2G,经过压缩处理可 ...

  5. 6410裸板程序,led、蜂鸣器、按键…

    //***************************************************************** //作者:昊天 // //功能:在ok6410板子上跑裸板程序, ...

  6. 辽宁工程技术大学校园网(深澜) 叠加小水管提速,多wan叠加负载均衡

    教程没啥大用了.可以直接修改路由器为DHCP自动获取ip,然后直接登录校园网. 昨天晚上尝试了下用潘多拉固件多wan叠加网速,负载均衡,算是提高了速度. 转载请注明出处.教程供参考.本教程不是破解教程 ...

  7. 1 JPA入门----项目搭建以及CRUD

    maven搭建JPA开发环境 1 依赖的maven pom文件     主要有hibernate-core.hibernate-entitymanager.javax-persistence.mysq ...

  8. Angular27 指令

    1 自定概述 2 自定义指令 详情参见<揭秘Angular2> 2.1 属性指令 >工具代码 <div class="panel panel-primary" ...

  9. 解决在Python中使用Win32api报错的问题,No module named win32api

    一.系统环境 操作系统: Win7 64位 Python:3.7.0 二.在使用import win32api时,报错:No module named win32api 网上查到有下面解决办法: 方法 ...

  10. Luogu 5043 【模板】树同构([BJOI2015]树的同构)

    BZOJ 4337 简单记录一种树哈希的方法:以$x$为根的子树的哈希值为$\sum_{y \in son(x)}f_y*base_i$,$f_y$表示以$y$为根的树的哈希值,其中$i$表示$f_y ...