简单絮叨一些
上篇文章主要唠了表单和文件上传等功能,这次主要是唠下异常处理、路径操作配置和JSON
兼容编码器等。异常处理就是针对
某些情况下,需要向客户端返回错误提示。路径操作配置就是路径操作装饰器支持多种配置参数。JSON
兼容器是在某些情况
下,您可能需要将数据类型转换为与 JSON
兼容的类型等,然后存储起来。
处理错误
使用HTTPException
某些情况下,需要向客户端返回错误提示。
需要向客户端返回错误提示的场景主要如下:
以上情况通常返回4xx
的HTTP
状态码,4xx
的状态码通常是指客户端发生的错误。
向客户端返回 HTTP
错误响应,可以使用 HTTPException
,这也是fastapi
默认。
from fastapi import FastAPI
from fastapi import HTTPException
app = FastAPI()
items = {
"foo": "333_2222_666"
}
@app.get("/items/{item_id}")
async def read_item(item_id: str):
"""
初次使用HTTPException
:param item_id:
:return:
"""
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return {"item": items[item_id]}
注释信息:
raise HTTPException(status_code=404, detail="Item not found")
是触发异常并抛出detail="Item not found"
参数 detail
传递任何能转换为 JSON
的值,不仅限于 str
,还支持传递 dict
、list
等数据结构注意点:
Python
异常,不能 return
,只能 raise
。
使用return
虽然不会报错,但牵扯到多层调用时,异常信息不一定会全部抛出,而raise
是专门抛异常的关键字。
启动服务:
PS E:\git_code\python-code\fastapiProject> uvicorn handle_main:app --reload
请求接口:
GET http://127.0.0.1:8000/items/bee
请求结果:
{
"detail": "Item not found"
}
因为bee
不在items
字典中,故触发异常并抛出异常信息。
添加自定义响应头
为HTTP
错误添加自定义信息头,暂时使用场景还没实操,可先了解下即可。
from fastapi import FastAPI
from fastapi import HTTPException
app = FastAPI()
@app.get("/items-header/{item_id}")
async def read_item_header(item_id: str):
"""
自定义响应头
:param item_id:
:return:
"""
if item_id not in items:
raise HTTPException(
status_code=404,
detail="Item not found",
headers={"H-Error": "This is an error message."}
)
return {"item": items[item_id]}
注释信息:
headers={"H-Error": "This is an error message."}
添加自定义响应头自定义异常处理器
自定义异常顾名思义就是自己去写