本文主要是介绍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}")
这篇关于FastAPI+Pydantic使用自定义参数校验+自定义异常+全局异常捕获的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!