Module 02 · Web App Deployment using Flask
Introduction to FlaskFlask 简介:轻量级 Web 框架
欢迎来到“Flask 简介”课程。观看本视频后,您将能够:
- 定义 Flask Web 框架 并描述其主要特性。
- 解释如何在您的机器上 安装 Flask。
- 描述 Flask 的主要依赖。
- 解释 Flask 与 Django 之间的主要区别。
什么是 Flask?
Flask 是一个用于创建 Web 应用程序的 微框架 (Micro Framework)。
- 非固执己见 (Non-opinionated):与一些大型框架不同,Flask 不会将用户绑定到特定的工具集或结构上。
- 起源:它最初由 Armin Ronacher 于 2004 年作为一个 愚人节玩笑 创建,但因其易用性和可扩展性而迅速流行。
- 依赖:
- Flask 提供的 最小化依赖 即可创建 Web 应用程序。
- 它具有 高度的可扩展性,许多社区扩展可以为其添加附加功能。
- 复杂依赖:Python 是其复杂依赖之一。运行 Flask 2.2.2 需要 Python 3.7 及以上版本。
Flask 的主要功能
| 功能类别 | 特性描述 |
|---|---|
| 开发工具 | 包含一个 Web 服务器,用于在开发模式下运行应用程序。 |
| 调试 | 附带一个 调试器,可在浏览器中显示 交互式回溯 (traceback) 和 堆栈跟踪 (stack trace),帮助应用程序调试。 |
| 日志记录 | 使用标准的 Python 日志记录 (logging) 机制,您可以利用同一日志记录器记录自定义消息。 |
| 测试 | 提供了测试应用程序不同部分的方法。此功能支持开发人员遵循 测试驱动开发 (TDD) 方法。可搭配 Pytest 和 Coverage 等框架使用。 |
| 请求/响应处理 | 开发人员可以访问 请求 (Request) 和 响应 (Response) 对象,以提取参数和自定义响应。 |
附加特性
- 静态资源支持:支持 CSS 文件、JavaScript 文件和图片等 静态资源,并提供标签在模板中加载它们。
- 动态页面:可以使用 Jinja 模板引擎 开发动态页面,这些页面可以显示随请求变化的或依赖用户登录状态的信息。
- 路由 (Routing):提供路由功能,支持 动态 URL,这对于 RESTful 服务 非常有用。
- 您可以为不同的 HTTP 方法创建路由,并在应用程序中提供重定向。
- 全局错误处理:允许编写在应用程序级别工作的 全局错误处理器。
- 会话管理:支持 用户会话管理 (User Session Management)。
流行社区扩展
虽然 Flask 自身轻量,但通过社区扩展可以轻松添加强大的功能:
| 扩展名 | 提供的功能 |
|---|---|
| Flask-SQLAlchemy | 为 Flask 添加了对 SQLAlchemy ORM 的支持,允许开发人员使用 Python 对象处理数据库。 |
| Flask-Mail | 提供了设置 SMTP 邮件服务器 的能力。 |
| Flask-Admin | 易于为 Flask 应用程序添加 管理界面。 |
| Flask-Uploads | 允许为应用程序添加 自定义文件上传 功能。 |
| Flask-CORS | 使您的应用程序能够处理 跨域资源共享 (CORS),从而实现跨域 JavaScript 请求。 |
| Flask-Migrate | 为 SQLAlchemy ORM 添加 数据库迁移 功能。 |
| Flask-User | 添加了 用户身份验证、授权 和其他用户管理活动。 |
| Marshmallow | 为代码添加了广泛的 对象序列化和反序列化 支持。 |
| Celery | 一个强大的 任务队列,可用于简单的后台任务和复杂的排程程序。 |
Flask 的安装与依赖项
安装指南
Flask 可通过 Python 包管理器 pip 获取。

- 创建虚拟环境:建议先使用
venv或pyvenv模块创建 虚拟环境 (Virtual Environment)。 - 安装:通过
pip安装指定版本(例如 2.2.2):
pip install Flask==2.2.2
- 版本固定:建议固定 (pin) 应用程序中所有依赖项的版本号。这确保了应用程序可以在开发、测试和生产等不同环境中从头开始重现,并防止因包自动更新而意外引入新问题。
内置依赖项
Flask 附带了一些内置依赖项,它们是实现各种核心功能的关键:
- Werkzeug:实现了 WSGI (Web Server Gateway Interface),这是应用程序和服务器之间的标准 Python 接口。
- Jinja:一个 模板语言,用于渲染应用程序中的页面。
- MarkupSafe:伴随 Jinja,在渲染模板时 转义不受信任的输入,以防止注入攻击。
- ItsDangerous:用于 安全地签名数据,有助于确定数据是否被篡改,用于保护 Flask 会话 Cookie。
- Click:一个用于编写 命令行应用程序 的框架。它提供了
flask命令并允许添加自定义管理命令。
您可以使用
pip freeze命令在虚拟环境中查看所有已安装的内置包。
Flask 与 Django 的主要区别
| 特性 | Flask | Django |
|---|---|---|
| 框架类型 | 微框架(追求轻量级)。 | 全栈框架(Full-stack Framework)。 |
| 依赖项 | 仅提供创建 Web 应用程序所需的 基本依赖项,开发者需自行选择其他扩展。 | 内置一切所需,可立即创建全栈应用程序。 |
| 灵活性 | 高度灵活,可以以即插即用 (plug-and-play) 的方式添加和移除组件。 | 固执己见 (Opinionated),替开发人员做出了大部分决策,使其能够专注于应用程序逻辑。 |
