Coursera 笔记

Module 02 · Web App Deployment using Flask

Error Handling错误处理

Coursera ↗

欢迎学习错误处理课程。在本节内容结束后,您将能够掌握以下要点:

✅ 描述 API 服务可返回的不同 HTTP 状态码。

✅ 解释 Flask 中的错误处理机制。

✅ 阐述如何从 API 端点 返回错误。


HTTP 状态码概述

每一个 HTTP 响应都包含一个三位数字的代码,用于指示不同的错误或成功状态,客户端负责处理(Consuming)这些错误代码。

  • 有效范围:100 至 599。
  • 分类方式:按百位数字进行分类。

状态码类别表

代码范围 类别说明 详细描述
100 - 199 ℹ️ 信息性状态码 表示请求已被接收,属于信息提示。
200 - 299 ✅ 成功状态码 表示请求已被接收,且请求的操作已成功执行。
300 - 399 ↪️ 重定向状态码 表示服务器端发生了重定向。
400 - 499 ❌ 客户端错误 表示请求本身存在错误。
500 - 599 💥 服务端错误 表示服务器端发生了错误。

注意:本课程中编写的 API 将遵循此命名规范。例如,若客户端请求不可用的资源,应发送 404 响应;若请求不正确,应响应 400 状态码。


Flask 中的状态码处理

1. 默认行为

当您从 app.route 方法返回或使用 jsonify 方法响应请求时,Flask 服务器会自动返回 200 OK 状态码。这意味着代码执行完毕后,默认发送状态码为 200 的成功响应。

2. 自定义返回状态码

代码可以返回除默认值以外的其他状态码。Flask 允许通过以下方式显式设置:

  • 使用元组 (Tuple):
    在代码中,可以将状态码作为元组的一部分与响应一起发送。

    示例:发送内容为 "my first application in action" 的 HTML 响应,并附带状态码 200。

  • 使用 make_response 方法:
    可以通过 make_response 方法显式设置状态码。

    示例:返回与上述相同的 HTML 消息和 HTTP 状态码 200,但实现方式是调用 make_response。


常用状态码详解

在本课程中,您可能会使用到以下状态码:

成功类 (2xx)

  • 200 OK:默认返回的状态码,表示请求成功。
  • 201 Created:告知客户端服务器已成功创建了资源。
  • 202 Accepted:表示请求已被接受并正在处理中,常用于批量处理操作。
  • 204 No Content:服务器成功完成请求后返回,无内容返回。适用于不希望浏览器采取任何操作(如用户停留在当前页面)的场景。

客户端错误类 (4xx)

  • 400 Bad Request:表示无效请求。可能意味着参数缺失、不当或其他方式的请求无效。
  • 401 Unauthorized:表示凭证缺失或无效。
  • 403 Forbidden:表示客户端凭证不足以满足请求要求。
  • 404 Not Found:服务器无法找到请求的资源。
  • 405 Method Not Allowed:表示请求的操作不受支持。

服务端错误类 (5xx)

  • 500 Internal Server Error:用于表示服务器端发生错误。

开发实战与测试示例

作为开发人员,需要确保服务返回正确的代码。

案例分析search_response方法

该方法用于查找数据库查询参数 q:

  1. 解析查询参数后,服务调用模拟的 fetch_from_database 方法。
  2. 若资源存在,代码将资源返回给客户端(隐式返回 200)。
  3. 若资源未找到,则返回 404。

使用curl程序调用端点测试

测试场景 返回结果 状态码
无查询参数调用 返回 "input parameter missing" (输入参数缺失) 消息 422
使用正确资源 ID 调用 返回资源正文 200
请求不存在的资源 返回 "resource not found" (资源未找到) 消息 404


应用程序级错误处理

Flask 提供了在应用程序级别处理错误消息的方法:

  1. 404 错误处理:
    可以定义一个方法处理 404 错误,返回消息 "API not found" 并设置状态码为 404。
  2. 500 错误处理:
    同理,可以创建一个处理 500 错误的句柄,返回消息 "something went wrong on the server" (服务器出错了)。

课程总结

在本视频中,您学习了:

  • HTTP 响应需要状态码来指示请求处理的结果。
  • HTTP 状态码分为多个类别,分别表示成功、用户错误或服务器错误。
  • Flask 默认在响应中隐式返回成功代码 200。
  • 您可以显式提供状态码。
  • Flask 提供了应用程序级别的错误处理程序。