跳转至

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)项目为例,步骤如下:

  1. mkdir blog 并 cd 进去(空目录)。
  2. pipenv install 创建虚拟环境(前提:上节课已 pip install pipenv)。
  3. 修改生成的 Pipfile,把默认的 PyPI 源改成国内镜像(阿里云 mirrors)——上节课讲过。
  4. pipenv install flask 安装 Flask。
  5. pipenv shell 进入虚拟环境。
  6. 验证:在环境中直接运行 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(键值对形式):
    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 给出完整要求。