1. Flask简介

1.1. Flask诞生

Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web 开发框架。

Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login, 数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。 比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。 Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

1.2. Flask特点

Python后端框架超级多,每个框架都有自己的特点和诞生愿意。对于Django来讲就是大而全,但对于 Flask的核心思想就是,只提供一个极小内核,需要什么自己外挂什么,常见的Flask的特点有:

  1. 轻巧
  2. 简洁
  3. 扩展性强,需要啥加挂啥
  4. 核心聚焦,因为内核啥也没有,自然聚焦了。

Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子, 也能结合最流行最强大的Python库。

入门简单,即便没有多少web开发经验,也能很快做出网站。

非常适用于小型网站。

非常适用于开发web服务的API。

开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验。

各方面性能均等于或优于Django。

Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方库。

Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一。

Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django。

Flask比Django更加Pythonic,与Python的philosophy更加吻合。

1.3. Flask 与 Django 的关系

理论上讲(本人没试验过), 把Django各种模块删掉并转化成相应的独立模块,django可以精简成一个 flask框架。

Flask加挂各种模块,然后彻底固化在一起,可以再造一个Django。

Django和Flask的区别只在有设计思想的根本区别:

  • Django:提供大而全开箱即用的框架
  • Flask: 提供一个极小但灵活的微框架,需要什么自己加

Django确实”重”, 我们部署一个大型Django项目,内存占用涨到20G+。除了项目本身确实庞大的原因外, Django的庞大也是原因之一。

1.4. Flask常见外挂

  • Flask-SQLalchemy:操作数据库;
  • Flask-script:插入脚本;
  • Flask-migrate:管理迁移数据库;
  • Flask-Session:Session存储方式指定;
  • Flask-WTF:表单;
  • Flask-Mail:邮件;
  • Flask-Bable:提供国际化和本地化支持,翻译;
  • Flask-Login:认证用户状态;
  • Flask-OpenID:认证;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间;
  • Flask-Admin:简单而可扩展的管理接口的框架