跳转至

12.6 Web开发——MVC与Flask

内容梗概

本课讲解 MVC 设计模式及其与 Flask 的关系。MVC 把应用分为模型(Model,数据)、视图(View,页面长相)、控制器(Controller,核心流程控制)三部分,是 Web 开发绕不开的概念。老师以学生名单网站为例逐一对应三部分,并澄清几个常见误解:Django 官方自认符合 MVC(且有所发展),Flask 官方则只称自己是微型框架——因为它不带数据库部分(没有 M);网上流传的"Flask 是 MTV"(Model-Template-Views)更多是噱头。本次博客作业只要求控制器和视图两部分,不要求数据库。

知识点详解

设计模式与 MVC(约 00:00–07:40)

  • 设计模式:开发软件时遵循一定的技巧/套路来设计软件的内部结构,这种套路就叫设计模式(大白话解释,老师声明自己不是设计模式专家,感兴趣可自行扩展)。
  • 为什么 Web 开发绕不开 MVC——以学生名单网站为例拆解:
  • View(视图):定义页面长什么样——大标题、列表形式、前面的点、红色的字等。对应前端的 HTML、JS、CSS。
  • Controller(控制器):整个应用的核心控制模块——什么时候显示哪些内容、显示 20 个还是 10 个、显示在哪个页面、从哪里获取数据、要不要做额外处理(如大小写转换)。定义了程序的主要执行流程。
  • Model(模型):核心数据——例子中的 students.txt;实际开发一般用数据库。
  • 三者的典型关系:Controller 从 Model 读数据,处理后展示在 View 上。
  • 控制器同时操作视图和模型,是主流交互方式;
  • 视图反过来影响控制器、模型直接展示在视图上——存在但一般**不推荐**;
  • 一般模型通过控制器展示在视图上。
  • 注意:不要被教科书上的连线图局限住——只要有这三方、按一定逻辑组织起来,就符合这个设计模式。

Flask 与 MVC 的关系(约 07:40–12:50)

  • Django(体量大、功能完整):官方文档认为自己符合 MVC 模型,甚至还有所发展。
  • Flask:官方从来不这么说。因为 Flask 本身**没有带数据库部分**——它认为自己没有 M,只管显示(视图)和控制(控制器)。
  • 想接入数据库(模型)行不行?行——需要单独安装扩展(如 Flask-SQLAlchemy,pip install flask-sqlalchemy 之类),用它连接数据库,把模型接入进来。
  • 关于"MTV"的说法(额外知识/故事,老师个人观点):
  • 网上有人把 Flask 的结构叫 MTV:M = Model(引入 Flask-SQLAlchemy 后有数据部分),T = Template(Jinja2 模板,告诉你 HTML 怎么生成、长什么样,实际对应 MVC 的 V),V = views.py(写各个 endpoint 函数的文件,实际对应 MVC 的 C)。
  • 即 M 对应 M、T 对应 V、V 对应 C,只是造了个与 MVC 形似的词,是个噱头;Flask 官方只认为自己是微型框架,"不跟你凑热闹"。
  • 作业范围说明:博客作业**不包含数据库部分**(想做可以,但不讲也不要求——数据库是单独一门课);只讲控制(Controller)和视图(View)两部分:学会写路径与 endpoint 的对应函数、学会写 Jinja2 模板,做出统一风格的网站。

示例与演示

  • 概念课,无代码演示。老师以学生名单网站为贯穿例子,把"页面样式 → View""控制显示逻辑 → Controller""students.txt/数据库 → Model"逐一对应。
  • 结尾预告:接下来看模板(templates)的示例代码。

重点与难点

  • MVC 三个字母各自管什么要能脱口而出:Model 数据、View 外观、Controller 流程。
  • 易错点:Flask 的 views.py 里的函数**不是** MVC 的 View——它们更接近 Controller;Flask 的 View 由 Jinja2 模板(Template)承担。
  • Flask 没有内置 M:要用数据库需装 Flask-SQLAlchemy 等扩展,这是"微框架"理念的体现——核心极简,按需扩展。
  • 三方交互的推荐方向:Model → Controller → View,避免视图直接操作模型。

关联内容

  • View/Controller/Model 的举例直接复用 12.3 的学生名单动态网站和 12.7 即将细讲的 Jinja2 模板。
  • "数据库是单独一门课"明确了本课程边界;Flask-SQLAlchemy 作为扩展方向留给有兴趣的学生。
  • 12.5 讲的路由与 endpoint 函数即本课所说的 Controller 部分;12.7 讲的模板即 View 部分。