首页 > 其他分享 > FastAPI学习-22.response 异常处理 HTTPException

FastAPI学习-22.response 异常处理 HTTPException

时间:2023-09-29 09:45:06浏览次数:52  
标签:HTTP HTTPException 22 items item FastAPI id 客户端

前言

某些情况下,需要向客户端返回错误提示。
这里所谓的客户端包括前端浏览器、其他应用程序、物联网设备等。
需要向客户端返回错误提示的场景主要如下:

  • 客户端没有执行操作的权限
  • 客户端没有访问资源的权限
  • 客户端要访问的项目不存在
  • 等等 ...

遇到这些情况时,通常要返回 4XX(400 至 499)HTTP 状态码
4XX 状态码与表示请求成功的 2XX(200 至 299) HTTP 状态码类似。
只不过,4XX 状态码表示客户端发生的错误。

使用 HTTPException

向客户端返回 HTTP 错误响应,可以使用 HTTPException

from fastapi import FastAPI, HTTPException

app = 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_code=404, detail="Item not found")
    return {"item": items[item_id]}

触发 HTTPException

HTTPException 是额外包含了和 API 有关数据的常规 Python 异常。
因为是 Python 异常,所以不能 return,只能 raise

如在调用_路径操作函数_里的工具函数时,触发了 HTTPException,FastAPI 就不再继续执行_路径操作函数_中的后续代码,而是立即终止请求,并把 HTTPException 的 HTTP 错误发送至客户端。

在介绍依赖项与安全的章节中,您可以了解更多用 raise 异常代替 return 值的优势。

本例中,客户端用 ID 请求的 item 不存在时,触发状态码为 404 的异常:

    raise HTTPException(status_code=404, detail="Item 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
还支持传递 dictlist 等数据结构。
FastAPI 能自动处理这些数据,并将之转换为 JSON。

添加自定义响应头

有些场景下要为 HTTP 错误添加自定义响应头。例如,出于某些方面的安全需要。

一般情况下可能不会需要在代码中直接使用响应头。

但对于某些高级应用场景,还是需要添加自定义响应头:

from fastapi import FastAPI, HTTPException

app = 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_code=404,
            detail="Item 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"}

标签:HTTP,HTTPException,22,items,item,FastAPI,id,客户端
From: https://www.cnblogs.com/yoyoketang/p/17736789.html

相关文章

  • FastAPI学习-23.异常处理器 exception_handler
    前言通常我们可以通过raise抛出一个HTTPException异常,请求参数不合法会抛出RequestValidationError异常,这是最常见的2种异常。HTTPException异常向客户端返回HTTP错误响应,可以使用 raise触发 HTTPException。fromfastapiimportFastAPI,HTTPExceptionapp=Fa......
  • FastAPI学习-24.自定义异常处理器 exception_handler
    前言添加自定义处理器,要使用 Starlette的异常工具。安装自定义异常处理器假设要触发的自定义异常叫作 UnicornException。且需要FastAPI实现全局处理该异常。此时,可以用 @app.exception_handler() 添加自定义异常控制器:fromfastapiimportFastAPI,Requestfromfa......
  • FastAPI学习-25.response_model 定义响应模型
    你可以在任意的_路径操作_中使用 response_model 参数来声明用于响应的模型:@app.get()@app.post()@app.put()@app.delete()fromtypingimportAny,List,UnionfromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classItem(BaseModel)......
  • kernel:watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [pgrep:33099] kernel:
    一、查看报错翻译   二、检查操作一台虚拟机又kvm虚拟了5台虚拟机,并且跑了大量任务,感觉像负载过大,CPU扛不住导致,导致内核锁死。三、解决办法执行echo30>/proc/sys/kernel/watchdog_thresh,调整该值可以延长watchdog等待时间,最大为60s。 ......
  • 226. 翻转二叉树
    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]第一眼想到了递归/***Definitionforabinarytreenode.*structTreeNode{*......
  • [LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组
    Problem:2251.花期内花的数目思路看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单解题方法此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start<=people[i]......
  • Setting up development environment with Ubuntu 22.04
    0.Dont'useSnap&Ubuntuappliationstore.90%的问题可以通过重启解决改了IP后需要,禁用网络后再开启才生效 1.Input:https://shurufa.sogou.com/linux/guide 2.IDE:https://www.jetbrains.com/toolbox-app/https://code.visualstudio.com/ 3.RemoteControl:......
  • 【略施小计】Pycharm2022取消双击shift搜索框
    Pycharm取消双击shift搜索框基于PyCharm2022.3.2(ProfessionalEdition),旧版本修改方式自行搜索双击shift弹出搜索框,输入内容doublemodifier,单击对应项勾选上,意味着禁止双击修改快捷键shift-shift随处搜索失效ctrl-ctrl运行任何内容失效最后应用保存即可。......
  • 如何更新ubuntu18.04->20.04->22.04
    https://www.lsjlt.com/news/375465.html#usethiscommandtoupdatethesystemversionfrom18.04to20.04#justfollowthetutorial,andclick'yes'and'keepversion'etc..#thefirstselectionthesystemautopresents#ittakes1h......
  • Ubuntu22.04安装AMBER22-串行+Cuda+并行版
       本人新采购了一台DELL工作站,准备作为计算平台。最近又听说AMBER22学术免费了,于是尝试在工作站上安装。安装过程主要参考的是Amber22的手册,*安装环境:Ubuntu22.04.3LTS,RTX4090,【gcc,g++,gfortran】10.5.0,CUDA11.2,cmake3.2.1一、......