Coursera 笔记

Module 02 · Web App Deployment using Flask

Introduction to FlaskFlask 简介:轻量级 Web 框架

Coursera ↗

欢迎来到“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 获取。

  1. 创建虚拟环境:建议先使用 venv 或 pyvenv 模块创建 虚拟环境 (Virtual Environment)。
  2. 安装:通过 pip 安装指定版本(例如 2.2.2):
  • pip install Flask==2.2.2
  1. 版本固定:建议固定 (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),替开发人员做出了大部分决策,使其能够专注于应用程序逻辑。