章节索引 :

Flask 框架简介

图片描述

Python 中存在众多的 Web 开发框架:Flask、Django、Tornado、Webpy、Web2py、Bottle、Pyramid、Zope2 等。近几年较为流行的,大概也就是 Flask 和 Django 了。我们以这些 Web 开发框架作为关键字,在慕课网中搜索相关课程,查询到的课程数量如下所示:

Web 开发框架 相应的课程数量
Django 17
Flask 15
Tornado 2
其余的框架 0

由此可见,Django 和 Flask 确实是 Python 领域中最主流的两个 Web 开发框架,本节课我们就来介绍下 Flask 框架的特点,并简单了解下 Flask 与 Django 框架的优缺点对比。

1. Flask 简介

Flask 是一个轻量级的 Web 框架,使用 Python 语言编写,较其他同类型框架更为灵活、轻便且容易上手,小型团队在短时间内就可以完成功能丰富的中小型网站或 Web 服务的实现。

Flask 具有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。

2. Flask 的特点

2.1 微框架

Flask 是一个 Python 实现的 Web 开发微框架,但是这个“”并不代表着 Flask 功能比较简陋、有所欠缺。微框架中的 “微” 意味着:

  • Flask 旨在保持核心简单而易于扩展
  • Flask 不会替用户做出太多决策,比如使用何种数据库;
  • Flask 的选项(比如使用何种模板引擎) 通常有多个,用户很容易替换。

默认情况下,Flask 不包含数据库抽象层、模板引擎、身份认证或其它任何已有多种库可以胜任的功能,如下图所示。然而,Flask 支持用扩展来给应用添加这些功能,应用程序可以很方便的集成这些扩展。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。

图片描述

2.2 约定优于配置

设计不好的框架通常需要多个配置文件,每一个都有许多设置选项,程序员需要记忆大量的参数配置。

但是 Flask 遵循约定优于配置(Convention Over Configuration),也称作按约定编程是一种软件设计范式。目的在于减少软件开发人员所需要做出的决定的数量,从而将开发变得简单,而又不失去其中的灵活性,开发人员仅仅需要规定应用中不符合约定的部分。

Flask 存在有众多的配置选项,但是在初始状况下,它们都有一个常用的默认值,并会遵循一些惯例。 例如:按照惯例,模板和静态文件分别存储在应用 Python 源代码树下的子目录 templates 和 static 里。虽然这个配置可以修改,但通常不必这么做,尤其是在刚开始学习的时候。

3. Django 简介

Django 是一个开放源代码的 Web 应用框架,由 Python 写成,它最初是被开发来用于管理一些以新闻内容为主的网站,即是CMS(内容管理系统)软件。

Django 是一个遵循 MVC 设计模式的框架。MVC 是 Model、View、Controller 三个单词的简写,分别代表模型、视图、控制器。Django 也是一个 遵循 MVC 设计模式的框架。MTV 是 Model、Template、View 三个单词的简写,分别代表模型、模版、视图 。

4. Django 的特点

Django 是一个 Python 实现的 Web 开发重框架。重框架中的 “重” 意味着,Django 除了实现 Web 框架的基本功能,内置了大量的模块,Django 的架构如下所示:

图片描述

与 Flask 的架构相比,两者的区别很明显:

  • Flask 仅包含最核心的框架功能,没有集成数据库访问、模板引擎等功能;
  • Django 不仅包含最核心的框架功能,还包含了数据库访问、模板引擎等功能。

Django 集成的功能模块包括:

对象关系映射 (ORM, Ojbect Relation Model)

以 Python 类形式定义数据模型,ORM 将模型与关系数据库关联,得到一个非常容易使用的数据库 API,同时也可以在 Django 中使用原始的 SQL 语句访问数据库。

表单处理

可以方便的生成各种表单模型,实现表单的有效性检验,可以方便的从定义的模型实例生成相应的表单。

模板引擎

Django 模板用于编写 html 代码,更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的 html 字符串返回给客户端浏览器。

后台管理系统

Django 自带一个 ADMIN site,类似于内容管理系统,不需要再花大量的工作来创建用户和内容管理系统。

5. Flask 与 Django 的比较

5.1 两个框架的区别

上面我们简单介绍了 Flask 和 Django 这两个 Web 开发框架,下面,我给大家总结一下这两个框架的区别到底在哪里:

其实两者最主要区别在于:Django 功能大而全,Flask 只包含基本的功能

Django 采用一站式解决的思路,Django 集成有模板、表单、路由、认证、基本的数据库管理等内建功能,开发者不用在选择应用的基础设施上花费大量时间。

Django 就像是一个装潢好的房子(如下图所示),它提供了各种家具,直接入住即可。

图片描述

Flask 相对于 Django 而言是轻量级的 Web 框架。和 Django 不同,Flask 只提供了最核心的功能,轻巧、简洁,通过定制第三方扩展来实现具体功能。

默认情况下,不包含数据库抽象、用户认证、表单验证、发送邮件等其它 Web 框架经常包含的功能。Flask 依赖用各种灵活的扩展(比如邮件 Flask Mail,用户认证 Flask Login,数据库 Flask SQLAlchemy)来给Web应用添加额外功能。

Flask 就像是一个没有装潢的房子(如下图所示),用户需要自己选择各种家具才可以入住。

图片描述

5.2 新手入门推荐

Flask 是一个轻量级的 Web 框架,只提供核心服务,较其他同类型框架更为轻便且容易上手,适用于小型团队在短时间内就可以完成功能丰富的中小型网站。与之相比,Django 是一个重量级的 Web 框架,内置许多常用的扩展,这些功能是由官方和社区共同维护的,其健壮性高,有利于保障项目质量。

推荐新手学习 Flask 框架,可以先从 Flask 开始,后使用 Django 重构。因为如果直接上 Django,作为新手,面对 Django 内置的各种繁杂功能产生很多疑惑。

就如同搭积木,如果直接给你一个搭好的模型,再拆开后(逆向过程),让你指出每块积木的作用,你可能会有疑惑。但是让你亲自一步步去搭好后(正向过程),再去拆解模型,你对每块积木的都会有不错的了解。

Flask 开发就像是这个正向过程,自己一步一步去集成想要的扩展,完善网站,每一步都亲自动手做一遍,有助于理解 Web 开发的很多概念。Django 开发就像是逆向过程,Django 已经帮你集成了许多常用的扩展,用户要做的去学习这些扩展的使用。

6. 本课程所需的前置基础知识

Flask 是一个用于 Web 开发的框架,学习本课程之前,需要掌握一定的 Web 开发基础,具体包括如下知识点:

  1. Python 的基本语法;
  2. Html 的常用标签;
  3. Css 的基本知识;
  4. Javascript 的基本语法。

本课程面向 Python 初学者,Python 初学者在学习完 Python 基本语法后,希望用 Python 完成一个具体的项目,用于开发一个网站。

7. 小结

本节介绍了 Python Web 开发的两个框架:Flask 和 Django,并对其进行了对比,使用思维导图总结如下:

图片描述