详说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客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
随机推荐
- Apache Shiro 权限框架
分享一个视屏教程集合 http://www.tudou.com/home/konghao/item 1.Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码 ...
- Linux VmWare安装虚拟机(centos6.9)
开启虚拟机 ---------------------------------------------------------------------------------------------- ...
- java基础之JDBC九:DbUtils的简介及使用
DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能. 使用步骤: A: 获取可以执行SQL语句的对象. pu ...
- docker下 zookeeper集群
首先创建所需的文件夹 mkdir -p /data/{data1,data2,data3} mkdir -p /data/{datalog1,datalog2,datalog3} docker-com ...
- libevent源码深度剖析九
libevent源码深度剖析九 ——集成定时器事件 张亮 现在再来详细分析libevent中I/O事件和Timer事件的集成,与Signal相比,Timer事件的集成会直观和简单很多.Libevent ...
- EF添加和修改
(1)//添加操作 public bool addDate() { try { //声明上下文 a_context = new AEntities(); //声明数据模型实体 //执行代码时候会先验证 ...
- Visual Studio + C# + Xamarin = iOS/Android/Windows Apps
Visual Studio 跨平台開發實戰 (1) -- Hello Xamarin! 前言 應用程式發展的腳步,從來沒有停過.從早期的 Windows 應用程式, 到網路時代的 web 應用程式,再 ...
- Docker学习之路(三)Docker网络详解
1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host ...
- swift基本运算
swift运算有单目运算,双目运算和三元运算 1:赋值操作 iX = iY//iX is 8 元组赋值 let (iX, iY = (, ) // iX is 8, iY is 7 和c语言不同的是, ...
- Luogu 4869 albus就是要第一个出场
BZOJ 2844 被NOIP模拟赛题弄自闭了QuQ. 因为本题要求异或,所以自然地构造出线性基,假设本题中给出的数有$n$个,而我们构造出的线性基大小为$m$,那么每一个可以异或出来的数相当于出现了 ...