12.4 Web开发——Flask初次运行¶
内容梗概¶
本课先从一张"全栈"全景图说明 Web 系统的完整规模(终端、Web Server、WSGI、数据库、框架),再引出 Flask 的定位:一个由 Werkzeug(HTTP 处理 + WSGI)和 Jinja2(模板引擎)等组成的微型 Web 框架。随后进入实操:创建 blog 项目目录,用 pipenv 建虚拟环境、改国内镜像源、安装 Flask,写出最小的 app.py 并运行,演示返回字符串;重点讲解 app.run(debug=True) 调试模式——保存代码后服务自动重启,修改即时生效。
知识点详解¶
Web 系统全景图(约 00:00–01:18)¶
- 一张大图展示 Flask 深入研究会发展到的规模("真·全栈"):左侧是各种终端(小程序、手机、Web 浏览器)访问 Web Server;Web Server 除提供 Web 服务外还有日志等逻辑;之后是 Web Server 部分、WSGI 部分;WSGI 还可能访问数据库。
- 呼应前面例子:把示例里的
students.txt换成数据库,就是一个正常的访问数据库的网站了(本课刻意用 txt,避免引入数据库知识)。 - WSGI framework 本身也可以变大,直接作为 Web Server 对外服务(就像前面的示例)。
Flask 是什么(约 01:18–03:35)¶
- Flask 是一个**微型(微框架)的 Web 框架**,主要由两部分构成:
- Werkzeug(德语"工具"之意):包含处理 HTTP 请求的部分(即 Web Server 模块)和一个 WSGI 部分——大致对应 WSGI 模型中的前两个角色。
- Jinja2:模板引擎。回忆 CGI 时代"程序根据参数和路径读取 HTML、替换其中部分内容再返回"的流程,Flask 的 App 里也有同样操作——
index、data这类函数可以读取某个 HTML 文件并替换其中一部分;替换哪一部分、按什么规则替换,由 Jinja2 模板引擎决定。Jinja2 提供嵌入 HTML 的模板语言,引擎按规则替换后把结果返回给 WSGI → Web Server → 浏览器。 - WSGI 模型复习:Web Server 模块 + WSGI 中间件 + Python 写的 App,三者都是 Python 实现。
实操:环境搭建(约 06:18–11:27)¶
以一个博客(blog)项目为例,步骤如下:
mkdir blog并cd进去(空目录)。pipenv install创建虚拟环境(前提:上节课已pip install pipenv)。- 修改生成的 Pipfile,把默认的 PyPI 源改成国内镜像(阿里云 mirrors)——上节课讲过。
pipenv install flask安装 Flask。pipenv shell进入虚拟环境。- 验证:在环境中直接运行
flask命令,出现 usage/options 帮助文档即配置成功;若提示"找不到该命令"则需检查前面步骤。
实操:最小 Flask 应用与调试模式(约 11:27–16:01)¶
- 新建
app.py(名字尽量就叫app.py;不叫的话需要额外设置环境变量来指定),写入最小示例代码。 - 运行:
python app.py。VS Code 里 Ctrl+单击终端中的链接即可打开页面。默认返回的是代码里写的字符串(演示把hello2改成abcd)。 - 非调试模式的坑:改了代码保存后刷新无效,必须
Ctrl+C退出再重新python app.py。 - 调试模式:在
app.run()中加参数debug=True(键值对形式): 启动信息中Debug mode: on;此后修改代码并 Ctrl+S 保存,终端会显示Detected change in ... reloading / restarting,服务自动重启,浏览器刷新即可看到新内容。自己开发时一定要开调试模式。 - 老师自谦"讲的是拧螺丝,作业让你们造航母",表示还要继续往下讲。
示例与演示¶
- 动手实验:搭建 blog 项目并跑通最小 Flask 应用
mkdir blog→pipenv install→ 改 Pipfile 镜像源 →pipenv install flask→pipenv shell→flask验证。- 写
app.py,python app.py运行,浏览器访问查看返回字符串。 - 修改返回字符串体会"非调试模式需重启"与"debug=True 自动重载"的区别。
- 本课示例是后续 12.5–12.7 逐步扩充为完整博客的起点。
重点与难点¶
- Flask 的组成:Werkzeug(HTTP + WSGI)+ Jinja2(模板引擎)——理解这个对后面讲路由和模板至关重要。
- 开发时务必
app.run(debug=True),否则每改一次代码都要手动重启,效率极低且容易误以为"代码没生效"。 - 虚拟环境流程(pipenv)是作业硬性要求的一部分,Pipfile 记得换国内源否则安装慢。
- 入口文件名默认
app.py,改名需要额外配置,初学者不要折腾。
关联内容¶
- 全景图中的"Web Server 模块 + WSGI 中间件 + App"直接对应 12.2 讲的 WSGI 模型。
- pipenv 虚拟环境、Pipfile 换国内镜像源承接第 10 章《第三方库与虚拟环境》(10.3 国内镜像源、10.5 虚拟环境管理)。
- Jinja2 模板的概念在 12.7 示例讲解中展开。
- 作业要求初现:blog 项目,后续 12.7 给出完整要求。