首页 > 其他分享 >fastapi HTTP异常处理

fastapi HTTP异常处理

时间:2024-09-11 12:02:25浏览次数:9  
标签:status code HTTP fastapi detail data user import 异常

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 Any

class BaseException(HTTPException):
    status_code = 500
    detail = '服务器异常'
    data = None
    def __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 = 500
    detail = '服务器异常'
    data = None


class UnAuthentication(BaseException):
    status_code = 401
    detail = 'Authentication Failed'

 

2.2、exception/__init__.py 全局异常处理

from fastapi.responses import JSONResponse

async 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_user

app = 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 User

user = APIRouter()

def get_db():
    try:
        yield db
    finally:
        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}

 

标签:status,code,HTTP,fastapi,detail,data,user,import,异常
From: https://www.cnblogs.com/shenh/p/18362995

相关文章

  • 统一异常处理+错误编码设计方案
     一、背景1、系统在运行的时候可能会有下面这些种类的错误/失败发生:(1)依赖组件挂了,可能是db,可能是mq,可能是cache。(2)依赖服务挂了,可能是别人给你提供的http/rpc服务挂了。(3)可能是你的依赖方超时了。(4)可能是调用方的参数有问题。(5)可能是调用方的参数无法正确地通过校验......
  • HTTPS执行过程
    HTTPS(超文本传输安全协议)是HTTP(超文本传输协议)的安全版本,它使用SSL/TLS协议来加密HTTP通信,从而确保数据的安全传输。下面将详细介绍HTTPS的工作流程:HTTPS的工作流程客户端发起请求:用户在浏览器中输入一个HTTPSURL(如https://example.com)。浏览器向服务器发送一个TCPSYN包......
  • Python之异常处理与程序调试(Exception Handling and Program Debugging in Python)
    ......
  • 【待做】【JavaWeb】HTTP、Tomcat、Servlet
    一、JavaWeb框架及HTTP介绍二、IDEA+Tomcat集成快速构建JavaWeb项目2.1快速构建JavaWeb项目2.2IDEA集成本地Tomcat2.3IDEA配置Tomcat的Maven插件2.4项目打包后的目录结构三、Servlet执行流程及生命周期介绍3.1Servlet介绍及写个接口3.2Se......
  • 【学习】为什么许多大型APP会采用RPC而不是HTTP协议呢?
    https://mp.weixin.qq.com/s/JD5qDjYFVn37pAC6W5JuDw原创前端欧巴在回答这个问题之前我们有必要系统性的了解一下RPC是何方神圣。---------------------------------------------------------------------------------------------RPC(RemoteProcedureCall,远程过程调用)是......
  • websocket协议与http协议
    WebSocket协议和HTTP协议都是用于网络通信的协议,但它们在设计目标、通信方式和应用场景上有一些关键的区别。以下是它们的主要区别:1.设计目标HTTP:设计目标:HTTP旨在为万维网提供一种标准化的请求/响应机制,允许客户端和服务器之间进行数据交换。它是无状态的,每个请求都......
  • RapidJSON 的坑--允许Object对象存在相同的key,且key为数字时序列化报异常
    RapidJSON的坑--允许Object对象存在相同的key,且key为数字时序列化报异常测试代码如下:1voidshow(rapidjson::Document&doc)2{3printf("-----------------foriterator\nMemberCount:%d\n",doc.MemberCount());4for(autoit=doc.MemberBegin();it!=doc......
  • docker Get "https://registry-1.docker.io/v2/": x509: certificate is valid for
    前言docker在进行build时,报错:Get"https://registry-1.docker.io/v2/":x509:certificateisvalidfor问题原因:Docker客户端无法验证DockerHub服务器的SSL/TLS证书解决在/etc/docker/daemon.json中新增国内镜像源:"registry-mirrors":["https:/......
  • HTTPS证书如何申请?只需这五个步骤
    在当今互联网+时代,保护用户的敏感数据和隐私变得越来越重要,HTTPS证书可以加密传输数据,有效保护传输数据安全,消除浏览器不安全提示,增加网站的安全性和可信性,由此个人或企业网站都建议部署HTTPS证书。那么我们应该如何申请HTTPS证书呢?在本文中,我们将向您介绍5个简单的步骤,让您轻......
  • Java Lambda 表达式为何无法抛出检查型异常?——函数式接口的限制解析
    JavaLambda表达式为何无法抛出检查型异常?——函数式接口的限制解析假设场景我们需要将一组Employee对象保存到文件中,这可以通过ObjectOutputStream序列化员工对象实现。我们利用forEach方法遍历员工列表,并调用writeObject()方法序列化数据。然而,writeObject()会抛出......