HTTPException
是FastAPI中用于处理HTTP错误的异常类。HTTPException
是一个非常有用的异常类,用于当HTTP请求处理过程中遇到错误时,能够优雅地返回HTTP错误响应给客户端。通过抛出 HTTPException
,你可以控制返回给客户端的HTTP状态码和响应体,使得客户端能够根据这些信息作出相应的处理。
一、简单用法
from fastapi import APIRouter,HTTPException@user.get('/book')
async def boot():raise HTTPException(status_code=500,detail='this is a test')# 客户端调用输出:
# 状态码status_code:500
# body:{"detail":"this is a test"}
二、自定义异常
2.1、exception/excepts.py 自定义HTTP异常处理
from fastapi import HTTPException
from typing import Anyclass BaseException(HTTPException):status_code = 500detail = '服务器异常'data = Nonedef __init__(self,**kwargs:Any):super().__init__(self.status_code,self.detail)self.status_code = kwargs.get('status_code', self.status_code)self.detail = kwargs.get('detail',self.detail)self.data = kwargs.get('data', self.data)class Failed(BaseException):status_code = 500detail = '服务器异常'data = Noneclass UnAuthentication(BaseException):status_code = 401detail = 'Authentication Failed'
2.2、exception/__init__.py 全局异常处理
from fastapi.responses import JSONResponseasync def exception_user(request, exc):return JSONResponse({'code':exc.status_code,'message':exc.detail,'data':exc.data},status_code=exc.status_code) # 状态码
2.3、main.py 使用 add_exception_handler 方法添加到app实例
from fastapi import FastAPI,Request,HTTPException
from exception import exception_userapp = FastAPI()
# 添加到app
app.add_exception_handler(HTTPException, exception_user)
2.4、raise 自定义HTTP异常
from fastapi import APIRouter,Depends
from exception.excepts import Failed
from plugin.pulgin_sqlalchamy import db
from sqlalchemy.orm import Session
from models.cms.user import Useruser = APIRouter()def get_db():try:yield dbfinally:db.close()@user.post('/dev')
async def dev(data:dict,db: Session = Depends(get_db)):user = db.query(User).filter_by(username = data['username'],password = data['password']).first()if not user:raise Failed(detail= '用户不存在')return user# 调用dev接口
# 状态码status_code: 500
# body:{"code":500,"message":"用户不存在","data":null}