详说Flask、Django、Pyramid三大主流 Web 框架
前言
目前随着 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 框架的更多相关文章
- Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)
摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...
- Flask(1)- 主流web框架、初识flask
一.Python 现阶段三大主流Web框架 Django.Tornado.Flask 对比 Django 主要特点是大而全,集成了很多组件(例如Models.Admin.Form等等), 不管你用得到 ...
- python三大主流web框架之Django安装、项目搭建
这一篇我们将迎来python强大的web框架Django,相信大家都已经不陌生,本篇将介绍Django的安装及基础项目搭建,大神略过~ Django是需要我们手动pip安装的,首先我们来安装Djang ...
- day 52 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...
- day 65 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基 ...
- 6 大主流 Web 框架优缺点对比:15篇前端热文回看
摘自:http://blog.csdn.net/VhWfR2u02Q/article/details/78993079 注:以下文章,点击标题即可阅读 <6 大主流 Web 框架优缺点对比> ...
- Django-手撸简易web框架-实现动态网页-wsgiref初识-jinja2初识-python主流web框架对比-00
目录 自己动手实现一个简易版本的web框架 手撸一个web服务端 根据请求 url 做不同的响应处理 基于wsgiref模块实现服务端 用wsgiref 模块的做的两件事 拆分服务端代码 支持新的请求 ...
- Django学习篇(web框架的由来)
Python的WEB框架有 Django.Tornado.Flask 等多种 ,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多 ...
- django基础一之web框架的本质
一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
随机推荐
- Java面向对象-构造方法,this关键字
Java面向对象-构造方法,this关键字 构造方法 概念:构造方法是一个特殊的方法,这个特殊方法用于创建实例时执行初始化操作: 上代码: package com.java1234.chap03.se ...
- SerialPort缓冲区
SerialPort缓冲区中有:接收缓冲区,发送缓冲区,输入缓冲区,输出缓冲区,传输缓冲区. 例如: 串口属性:BytesToRead(获取接收缓冲区中数据的字节数)--这里提到的是“接收缓冲区” 串 ...
- 转:创建一个javaweb项目,以及导出war包
一.使用IDEA创建一个javaweb项目 1.File->New Project选择Web Application 1 2 然后填写好路径和项目名称,点击确定. 1 2 2.先看一下刚创建好的 ...
- java基础之io流总结四:字符流读写
字符流读写只适用于字符文件. 基本字符流(转换流)读写文件 转换流本身是字符流,但是实例化的时候传进去的是一个字节流,所以叫做转换流 InputStreamReader isr = new Input ...
- 【原创】9. MYSQL++中的Field、FieldNames以及FieldTypes类型
mysqlpp::Field其实使用的并不多,主要在于Result.h中ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)的几个获取下一个field ...
- 496. Next Greater Element I 另一个数组中对应的更大元素
[抄题]: You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subse ...
- 项目二:品优购 第二天 AngularJS使用 brand商品页面的增删改查
品优购电商系统开发 第2章 品牌管理 传智播客.黑马程序员 1.前端框架AngularJS入门 1.1 AngularJS简介 AngularJS 诞生于2009年,由Misko Hevery 等人 ...
- Map-making Robots: A Review of the Occupancy Grid Map Algorithm
栅格地图算法:http://www.ikaros-project.org/articles/2008/gridmaps/
- HTTP防盗链与反防盗链
HTTP防盗链 通过上一次,我没对HTTP请求不再那么陌生了.防盗链无非就是别人来请求自己网站的信息,用于其他网站,那么如果我们能识别请求是来自那个网站,如果是外网,那么就重定向等其他处理.但在web ...
- Servlet请求转发 RequestDispatcher接口.RP
在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应. 一,RequestDispatcher接口 ...