Coursera 笔记

Module 02 · Web App Deployment using Flask

Flask - Basic Applications and Routes基础应用与路由

Coursera ↗

欢迎观看“基础应用与路由”课程。看完本视频后,您将能够:

  • 创建并运行一个带有 基本路由 的 Flask 应用程序。
  • 解释如何从服务器向客户端 返回 JSON 响应。
  • 描述 Flask 中可用的 各种配置选项。

创建和运行第一个 Flask 应用

在创建您的第一个 Flask 应用程序之前,请确保已安装 Flask。

编写服务器代码 (app.py)

  1. 导入与实例化:
  • 首先,从 flask 模块中导入 Flask** 类**(注意大小写)。
  • 接下来,实例化一个 Flask 类的对象作为您的应用 (app)。
    • 构造函数接受一个 Scaffold 类的参数。您通常通过传入内置的 __name__ 变量(即应用模块的名称)来设置名称。
    • 此名称用于查找文件系统上的资源,并供扩展提供调试信息。
      Python
from flask import Flask
# 实例化 Flask 应用
app = Flask(__name__)

  1. 定义路由:
  • 使用 @app.route** 装饰器** 来定义一个路由(URL 处理器)。
  • 该装饰器接受 路径 作为参数。
  • 在被装饰的方法中,您可以 返回文本或 HTML。
    Python
@app.route("/")
def hello_world():
    # 返回 HTML 消息
    return "<b>my first Flask application in action!</b>"

运行应用程序

运行 Flask 应用程序需要设置系统环境变量并执行 flask run 命令。

  1. 设置环境变量:
  • FLASK_APP:包含主服务器文件名(例如 app.py)。
  • FLASK_ENV:定义运行环境(development 或 production)。注意:此变量将在 Flask 2.3 中弃用。
    Bash
# 在 Linux/macOS
export FLASK_APP=app.py
export FLASK_ENV=development

# 在 Windows (CMD)
set FLASK_APP=app.py
set FLASK_ENV=development

  1. 执行运行命令:
  • 执行 flask run 命令来运行应用程序。

    Bash
flask run
  • Flask 应用程序默认运行在 端口 5000 上。您可以通过 http://localhost:5000 访问您的消息。

浏览器验证

当您访问 http://localhost:5000 时:

  • 请求方法:HTTP GET
  • 响应状态:200 OK(表示成功响应)
  • 内容类型:响应头中的 Content-Type 为 text/html。
  • 服务器信息:Server 为 Werkzeug(运行在特定 Python 版本上)。

替代运行配置

您也可以通过命令行参数进行配置,而不是使用环境变量:

  • 使用 --app 来指定要运行的 Python 文件(例如 --app app.py)。
  • 添加 --debug 来启用开发模式。
    • --debug 标志会启用 自动重启(当源文件更改时),这对应用开发非常有用。

Bash

flask run --app app.py --debug

如果您的应用文件名为 app.py 并且在当前目录下,您可以省略 --app app.py,因为这是 Flask 的默认查找名称。


返回 JSON 响应

Flask 提供了多种方法来从您的应用程序返回 JSON 格式的响应。

1. 返回可序列化对象

  • 方法:直接返回一个 可序列化对象,如 Python 字典或列表。
  • 原理:Flask 将使用 Python json 模块 自动将该对象序列化为 JSON 并返回给客户端。

Python

@app.route("/json_data")
def get_json():
    # 返回一个 Python 字典
    return {"message": "Hello from Flask!", "status": 200}
  • 结果验证:使用 curl 命令测试时,您会看到:
    • 响应状态:200 OK
    • 内容类型:application/json
    • 返回内容:正确的 JSON 格式数据。

如果您返回一个更复杂的对象(如类实例),请确保它能够被正确序列化。

2. 使用jsonify()方法

  • 方法:导入并使用 Flask 提供的 jsonify() 方法。
  • 用法:jsonify() 接受 键值对 作为输入,并返回一个包含适当 JSON 的响应对象。

Python

from flask import Flask, jsonify # 别忘了导入 jsonify

@app.route("/jsonify_data")
def get_jsonify():
    # 使用 jsonify 返回 JSON
    return jsonify(message="Hello from jsonify!", status=200)

  • 结果:您将获得与直接返回字典相同的结果,状态码为 200 OK,Content-Type 为 application/json。

Flask 配置选项

除了 FLASK_ENV 和 FLASK_APP 之外,Flask 还提供了各种其他配置选项:

配置选项 描述
ENV 指示应用程序运行的环境(production 或 development)。
DEBUG 启用调试模式(例如,启用调试器和代码自动重载)。
TESTING 启用测试模式。
SECRET_KEY 用于 签署会话 (session) cookie 的密钥。
SESSION_COOKIE_NAME 会话 Cookie 的名称。
SERVER_NAME 绑定主机和端口(例如 localhost:5000)。
JSONIFY_MIMETYPE JSON 响应的 MIME 类型,默认为 application/json。

提供配置选项的方式

您可以通过多种方式向 Flask 提供配置选项:

  1. 环境变量:如前面所述的 FLASK_APP 和 FLASK_ENV。
  2. app.config** 对象**:可以直接在应用实例的 config 对象中插入配置选项:
    Python
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'my-secret-key'
  1. 从文件加载:可以将配置选项保存在一个单独的 JSON 文件 中,并使用 config 对象的 from_file() 方法加载。
  2. 从 Python 文件加载:您可以将配置保存在一个独立的 Python 文件中,并使用 app.config.from_pyfile('config.py') 加载。

应用程序目录结构(建议)

随着应用规模的增长,建议创建一个 目录结构,而不是将所有内容都放在一个 Python 文件中。一个示例结构如下:

  • 主模块目录:用于存放主要源代码。
  • 配置 (Config):将所有配置保存在一个单独的文件中。
  • 静态 (Static) 目录:用于存储图像、JavaScript 和 CSS 文件等静态资源。
  • 模板 (Templates) 目录:用于存储动态内容(Jinja 模板)。
  • 测试 (Tests) 目录:存放所有测试文件。
  • 虚拟环境:用于安装正确版本的依赖项并激活。

知识总结

在本视频中,您学到了:

  • 通过实例化 Flask** 类** 来创建服务器。
  • 使用 @app.route** 装饰器** 创建 URL 处理器。
  • 通过返回字符串消息或使用 jsonify()** 方法** 来返回 JSON 对象。
  • 可以通过以下方式设置应用程序配置:
    • 环境变量
    • Python 文件
    • 直接操作 app.config** 对象**