山东省建设执业师网站,如何让wordpress重新安装,注册一个新公司的流程如下,flutter 如何做网站前言
某些情况下#xff0c;需要向客户端返回错误提示。 这里所谓的客户端包括前端浏览器、其他应用程序、物联网设备等。 需要向客户端返回错误提示的场景主要如下#xff1a;
客户端没有执行操作的权限客户端没有访问资源的权限客户端要访问的项目不存在等等 …
遇到这些…前言
某些情况下需要向客户端返回错误提示。 这里所谓的客户端包括前端浏览器、其他应用程序、物联网设备等。 需要向客户端返回错误提示的场景主要如下
客户端没有执行操作的权限客户端没有访问资源的权限客户端要访问的项目不存在等等 …
遇到这些情况时通常要返回 4XX400 至 499HTTP 状态码。 4XX 状态码与表示请求成功的 2XX200 至 299 HTTP 状态码类似。 只不过4XX 状态码表示客户端发生的错误。
使用 HTTPException
向客户端返回 HTTP 错误响应可以使用 HTTPException。
from fastapi import FastAPI, HTTPExceptionapp FastAPI()items {foo: The Foo Wrestlers}app.get(/items/{item_id})
async def read_item(item_id: str):if item_id not in items:raise HTTPException(status_code404, detailItem not found)return {item: items[item_id]}触发 HTTPException
HTTPException 是额外包含了和 API 有关数据的常规 Python 异常。 因为是 Python 异常所以不能 return只能 raise。
如在调用_路径操作函数_里的工具函数时触发了 HTTPExceptionFastAPI 就不再继续执行_路径操作函数_中的后续代码而是立即终止请求并把 HTTPException 的 HTTP 错误发送至客户端。
在介绍依赖项与安全的章节中您可以了解更多用 raise 异常代替 return 值的优势。
本例中客户端用 ID 请求的 item 不存在时触发状态码为 404 的异常 raise HTTPException(status_code404, detailItem not found)响应结果
请求为 http://example.com/items/fooitem_id 为 「foo」时客户端会接收到 HTTP 状态码 - 200 及如下 JSON 响应结果
{item: The Foo Wrestlers
}但如果客户端请求 http://example.com/items/baritem_id 「bar」 不存在时则会接收到 HTTP 状态码 - 404「未找到」错误及如下 JSON 响应结果
{detail: Item not found
}触发 HTTPException 时可以用参数 detail 传递任何能转换为 JSON 的值不仅限于 str。 还支持传递 dict、list 等数据结构。 FastAPI 能自动处理这些数据并将之转换为 JSON。 添加自定义响应头
有些场景下要为 HTTP 错误添加自定义响应头。例如出于某些方面的安全需要。
一般情况下可能不会需要在代码中直接使用响应头。
但对于某些高级应用场景还是需要添加自定义响应头
from fastapi import FastAPI, HTTPExceptionapp FastAPI()items {foo: The Foo Wrestlers}app.get(/items-header/{item_id})
async def read_item_header(item_id: str):if item_id not in items:raise HTTPException(status_code404,detailItem not found,headers{X-Error: There goes my error},)return {item: items[item_id]}响应结果
HTTP/1.1 404 Not Found
date: Sun, 24 Sep 2023 01:31:18 GMT
server: uvicorn
x-error: There goes my error
content-length: 27
content-type: application/json{detail:Item not found}