Module 02 · Web App Deployment using Flask
Dynamic Routes动态路由
欢迎观看“动态路由”视频。观看本视频后,您将能够:
- 描述如何在 Flask 中调用 外部 API。
- 描述如何在 Flask 中向路由传递 参数。
在 Flask 中调用外部 API
让我们看一个在 Flask 中调用外部 API 的示例。
最简单的方法是使用 Python 的 requests 库。
您可以将来自外部 API 的 JSON 直接返回给客户端,但您也可以在将结果发送回客户端之前对其进行 处理。
示例代码及说明
以下是一个示例:
- 首先,您需要导入
flask和requests模块。
注意:* 此处的代码假设您已经安装了
requests库。*
- 接着,您可以定义路由。
- 使用
requests库请求 OpenLibrary API,搜索作者 Michael Crichton 的信息。 - 将响应存储在一个名为
res的变量中。 - 然后,检查 OpenLibrary API 返回的响应状态码是否为
200。
- ✅ 如果响应是
200,您将 JSON 返回给客户端。 - ⚠️ 如果响应恰好是
404,您发送一条消息:“Something went wrong.”(出错了)。 - ❌ 在这种假设情况下,如果响应是任何其他状态码,您将返回
500状态码和消息:“Server error.”(服务器错误)。
在 Flask 中使用动态路由
在开发 RESTful API 时,您可以将某些 资源 ID 作为请求 URL 的一部分发送。
例如,您想创建一个 端点 (endpoint),通过 国际标准书号 (ISBN) 返回图书信息,但您不想硬编码 ISBN,而是希望客户端将其作为 URL 的一部分发送。
Flask 为此提供了 动态路由 (Dynamic Routing) 功能。
动态路由的具体示例
让我们看一个具体的例子:
- 将名为
isbn的变量添加为 URL 的动态部分。 - 然后将此变量传递给 OpenLibrary API。
- 结果随后被发送回客户端。
参数类型设置
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 以获取网络信息。
您可以编写以下代码:
- 路由期望一个类型为
uuid的变量uuid。 - 该
uuid作为参数传递给方法。 - 如果找到了该
uuid,您返回一条成功消息。 - 否则,您返回一个错误代码和相应的错误消息。
总结要点
在本视频中,您学习到:
- 您可以解析 请求对象 (Request Object) 来获取 查询参数 (query parameters)、请求体 (body) 和其他参数。
- 您可以在将响应发送回客户端之前,在 响应对象 (Response objects) 上设置 状态码 (status)。
- 您可以使用 动态路由 来创建 RESTful 端点。