【FastAPI】错误请求处理

说明

在许多情况下,您需要将错误通知给正在使用API​​的客户端。FastAPI 使用 Python 的 HTTPException 异常进行处理,所以 raise 它。

实例

from fastapi import FastAPI,HTTPException
import uvicorn

app = FastAPI()

@app.get("/user") 
async def read_item(age: int,name: str):
    if age < 18:
        # 返回客户端 500 状态码 及错误原因
        raise HTTPException(status_code=500,detail="age 小于 18")

    return {"name": name,"age": age}

if __name__ == '__main__':
    uvicorn.run(
        app = app,
        host = "127.0.0.1",
        port = 80,
    )

mark

添加自定义 Headers

@app.get("/user")
async def read_item(age: int,name: str):
    if age < 18:
        # 返回客户端 500 状态码 及错误原因
        raise HTTPException(
            status_code=500,
            # detail 可以是 list、dict、str
            detail={"msg":"age 小于 18"},
            # 自定义 headers
            headers={"X-Error": "There goes my error"}
        )

    return {"name": name,"age": age}

mark

自定义异常处理程序

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import uvicorn

app = FastAPI()

# 异常参数类
class UnicornException(Exception):
    def __init__(self, status_code: int, msg: str):
        # 错误状态码
        self.status_code = status_code
        # 错误内容
        self.msg = msg

# 异常响应
@app.exception_handler(UnicornException)
async def unicorn_exception_handler(request: Request, exc: UnicornException):
    return JSONResponse(
        # 错误响应状态码
        status_code= exc.status_code,
        # 错误返回内容格式
        content={"msg": exc.msg},
    )

@app.get("/user/{name}")
async def read_item(name: str):
    if name == "bigdata":
        # 错误提示
        raise UnicornException(status_code=404, msg="用户名错误,没有该用户")
    return {"name": name}

if __name__ == '__main__':
    uvicorn.run(
        app = app,
        host = "127.0.0.1",
        port = 80,
    )

测试URL:http://127.0.0.1/user/bigdata?name=bigdataboy

mark

发表评论 / Comment

用心评论~