当前位置: 首页 > news >正文

FastAPI+Pydantic使用自定义参数校验+自定义异常+全局异常捕获

目录

1 自定义参数校验异常

2 自定义的curr_page_v参数校验函数,如果不合法抛出自定义异常!

3 配置全局异常


1 自定义参数校验异常

# 1.用户自定义异常类型,只要该类继承了Exception类即可
class ValDtoError(Exception):# 初始化def __init__(self, message):self.message = message# 类一般返回值def __str__(self):return "参数校验异常!" + self.message

2 自定义的curr_page_v参数校验函数,如果不合法抛出自定义异常!

Pydantic提供了四种validator :

BeforeValidator 运行在Pydantic内部的校验转换之前,入参为输入值Any,返回值为Any。

AfterValidator 运行在Pydantic内部的校验转换之后,入参和返回值为正确的字段类型。 

PlainValidator 运行时间和BeforeValidator相同,但执行完之后整个校验过程结束,不再执行其他validator和Pydantic内部的校验流程。

 WrapValidator 可以运行在pydantic和其他validator之前或者之后,或者返回值、抛出异常立即结束校验流程。

可以使用多个BeforeValidator、AfterValidator和WrapperValidator,但是只能有一个PlainValidator关于执行顺序,从右到左执行所有Before和Wrap校验器,再从左到右执行所有After校验器

class CommonPageDto(BaseModel):def curr_page_v(v:int) -> int:if 111 > v:raise ValDtoError('开始页不能小于0!')return vcurrPage: Annotated[int, BeforeValidator(curr_page_v)]pageSize: intsearch: dict


3 配置全局异常

@app.exception_handler(ValDtoError)
async def request_validation_exception_handler2(request: Request, exc: ValDtoError):print(f"参数校验异常{request.method} {request.url}")print(exc)return fail_res(f"请求参数为{exc}")

http://www.lryc.cn/news/199270.html

相关文章:

  • Python综合练习题
  • SpringCloud+Nacos集成Seata-1.7.0分布式事务
  • 任务调度框架-如何实现定时任务+RabbitMQ事务+手动ACK
  • 修炼k8s+flink+hdfs+dlink(六:学习k8s)
  • 红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接
  • Qt Designer生成ui文件,如何转py文件,如何运行
  • Python数据挖掘:自动售货机销售数据分析与应用
  • 【设计模式】设计模式概述
  • 第六届“中国法研杯”司法人工智能挑战赛进行中!
  • 关于 passing ‘const xx’ as ‘this’ argument of 的错误
  • 数据结构和算法(13):优先级队列
  • 面试经典150题——Day15
  • web APIs——第一天(上)
  • 【Leetcode】215. 数组中的第K个最大元素
  • 服务器数据恢复-RAID5常见故障的数据恢复方案
  • 12个VIM编辑器的高级玩法
  • ⽜客论坛的笔记
  • JS逆向分析某枝网的HMAC加密、wasm模块加密
  • 论坛介绍|COSCon'23开源商业(V)
  • 在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF
  • Flink学习笔记(三):Flink四种执行图
  • 堆-----数据结构
  • 震撼登场 | 拓世科技集团新品亮相成为2023世界VR产业大会全场焦点
  • 后端接口的查询方式
  • Maven首次安装配置
  • 使用html2canvas将html转pdf,由于table表的水平和竖直有滚动条导致显示不全(或者有空白)
  • EDID详解
  • 浅谈云原生
  • 【K8S】Kubernetes
  • 面试题 01.01. 判定字符是否唯一