Coursera 笔记

Module 02 · Web App Deployment using Flask

Dynamic Routes动态路由

Coursera ↗

欢迎观看“动态路由”视频。观看本视频后,您将能够:

  • 描述如何在 Flask 中调用 外部 API。
  • 描述如何在 Flask 中向路由传递 参数。

在 Flask 中调用外部 API

让我们看一个在 Flask 中调用外部 API 的示例。

最简单的方法是使用 Python 的 requests 库。

您可以将来自外部 API 的 JSON 直接返回给客户端,但您也可以在将结果发送回客户端之前对其进行 处理。

示例代码及说明

以下是一个示例:

  1. 首先,您需要导入 flask 和 requests 模块。

注意:* 此处的代码假设您已经安装了 requests 库。*

  1. 接着,您可以定义路由。
  2. 使用 requests 库请求 OpenLibrary API,搜索作者 Michael Crichton 的信息。
  3. 将响应存储在一个名为 res 的变量中。
  4. 然后,检查 OpenLibrary API 返回的响应状态码是否为 200。
  • ✅ 如果响应是 200,您将 JSON 返回给客户端。
  • ⚠️ 如果响应恰好是 404,您发送一条消息:“Something went wrong.”(出错了)。
  • ❌ 在这种假设情况下,如果响应是任何其他状态码,您将返回 500 状态码和消息:“Server error.”(服务器错误)。

在 Flask 中使用动态路由

在开发 RESTful API 时,您可以将某些 资源 ID 作为请求 URL 的一部分发送。

例如,您想创建一个 端点 (endpoint),通过 国际标准书号 (ISBN) 返回图书信息,但您不想硬编码 ISBN,而是希望客户端将其作为 URL 的一部分发送。

Flask 为此提供了 动态路由 (Dynamic Routing) 功能。

动态路由的具体示例

让我们看一个具体的例子:

  1. 将名为 isbn 的变量添加为 URL 的动态部分。
  2. 然后将此变量传递给 OpenLibrary API。
  3. 结果随后被发送回客户端。

参数类型设置

Flask 还允许您设置 参数类型 (Parameter Type)。该框架使用此信息来 验证 传入的请求。

例如,您可以创建一个 terminals(航站楼)和 SFO(旧金山机场)的端点,以获取旧金山机场的航站楼数量。

  • 此路由装饰器会在用户在 URL 末尾发送 string 类型的值时触发。
  • 类似地,在前面的示例中,您可以将 ISBN 指定为 number 类型。

常用参数类型示例

参数类型 描述 示例用法
string 简单字符串(默认) /users/<string:username>
int 正整数 /books/<int:isbn>
float 浮点数 /data/<float:value>
path 接受斜杠 (/),可用于表示 Web 路径 或 文件夹路径 /files/<path:filepath>
uuid 通用唯一标识符 (Universal Unique Identifier),用于表示 全局唯一标识符 (GUID) 等唯一 ID /network/<uuid:id>

UUID 类型的示例

以下是一个使用 UUID 的例子:

您可以创建一个 network(网络)端点,该端点具有一个特定的 UUID 以获取网络信息。

您可以编写以下代码:

  1. 路由期望一个类型为 uuid 的变量 uuid。
  2. 该 uuid 作为参数传递给方法。
  3. 如果找到了该 uuid,您返回一条成功消息。
  4. 否则,您返回一个错误代码和相应的错误消息。

总结要点

在本视频中,您学习到:

  • 您可以解析 请求对象 (Request Object) 来获取 查询参数 (query parameters)、请求体 (body) 和其他参数。
  • 您可以在将响应发送回客户端之前,在 响应对象 (Response objects) 上设置 状态码 (status)。
  • 您可以使用 动态路由 来创建 RESTful 端点。