详说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客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
随机推荐
- C#统计网站访问总人数和当前在线人数 Application
一.打开vitualstudio2010,新建一个网站,然后添加新项,新建一个login.aspx和index.aspx页面.再添加新项,选择全局应用程序类,该页面为Global.asax. 第一步: ...
- Linux 学习笔记之 --- epoll 事件模型详解
epoll 主要采用对已就绪的 fd 进行轮询操作 一.epoll 触发方式 epoll支持 ET 和 LT 两种触发方式 ET(边缘触发):Nginx 就是采用 ET 触发方式,只支持 no-b ...
- Directshow 采集音视频数据H264+AAC+rtmp效果还不错
从usb摄像头或者采集卡中采集效果还是不错的.
- 【285】ArcPy 暗色窗体设置
预览图 设置如下 Default:
- 嵌入式 Linux 与linux启…
一.在ARM linux 下,一般而言,产品在启动的过程中应该加载模块,最简单的方法是修改启动过程的rc脚本(/etc/init.d/rcS),增加ismod /../xxx.ko这个命令.例如:加载 ...
- C#使用ADO操作Excel
1 说明 把excel当成一个数据库,类似于Access数据库来操作. 2 源代码 2.1 Model层 /// <summary> /// 人员信息 /// </summary&g ...
- c++多线程编程(二)
这是道面试题目:有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC… 见代码: #include <iostream> #include <Wind ...
- vectors 使用应该注意到的问题
ector1. vector的元素必须具备 assignable和 copyable . 2.vector的迭代器是随机存取迭代器. 3.要考虑到vector的大小(size)和容量(capacity ...
- HTML中禁用表中控件的两种方法与区别
在网页的制作过程中,我们会经常使用到表单.但是有时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的. 在html中有两种禁用的方法,他们分别是: ...
- C++ 重载操作符- 01 简单的入门
重载操作符的定义 这篇博客是对 重载操作符 的一个概要性的介绍. 重载操作符是C++语言的高级功能,当我们写一个类的时候,可以根据需要学一个重载操作符,如果 不需要,我们可以不写. 大量的操作符都可以 ...