fastapi 统一错误处理中间件
时间: 2023-08-27 18:04:32 浏览: 188
在 FastAPI 中,你可以使用中间件来实现统一的错误处理。下面是一个示例:
```python
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.exceptions import RequestValidationError
from starlette.exceptions import HTTPException as StarletteHTTPException
from starlette.responses import JSONResponse
app = FastAPI()
# 添加跨域中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
# 自定义异常处理中间件
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
return JSONResponse(
status_code=400,
content={"detail": "Validation error"}
)
@app.exception_handler(StarletteHTTPException)
async def http_exception_handler(request, exc):
return JSONResponse(
status_code=exc.status_code,
content={"detail": str(exc)}
)
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id == 42:
raise StarletteHTTPException(status_code=403, detail="Item forbidden")
return {"item_id": item_id}
```
在上面的示例中,我们添加了一个跨域中间件 `CORSMiddleware`,它允许跨域请求。然后,我们定义了两个异常处理器函数:`validation_exception_handler` 和 `http_exception_handler`。
`validation_exception_handler` 处理 `RequestValidationError` 类型的异常,而 `http_exception_handler` 处理 `StarletteHTTPException` 类型的异常。
这些异常处理器函数会被自动调用,当抛出相应的异常时,它们会返回自定义的 JSON 响应,以提供有关错误的详细信息。
请注意,此示例仅用于演示目的。在实际使用时,你可能需要根据具体需求进行定制和优化。另外,你还可以添加其他中间件来处理日志记录、身份验证等任务。
阅读全文