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 部分。