"""
测试 FastApi的post请求中的数据验证, 使用的是Body 类似于Path,Query ,embed=True 请求体中使用 json key-value
"""
from fastapi import FastAPI, Body, Request
from fastapi.responses import JSONResponse
from typing import Optional
from fastapi.exceptions import RequestValidationError
app = FastAPI() # 创建FastApi对象
# 自定义异常处理
@app.exception_handler(RequestValidationError) # 重写了RequestValidationError的 exception_handler方法
async def post_validation_exception_handler(request: Request, exc: RequestValidationError):
"""
自定义异常处理
:param request: Request的实例化对象
:param exc: RequestValidationError的错误堆栈信息
:return:
"""
print(f'参数不对{request.method},{request.url}')
return JSONResponse({'code': 400, 'msg': exc.errors()})
# post请求参数验证 方式一: Body
@app.post('/bar')
async def test_post_args(
post_id: int = Body(1, title='ID'),
name: Optional[str] = Body(None, title='姓名', max_length=10, regex='^1'),
age: Optional[int] = Body(None, title='年龄', le=96)
):
"""
post请求中 Body 是用来测试参数的方式之一
:param post_id: 请求参数的ID
:param name: 姓名
:param age: 年龄
:return: post_id,name,age
"""
return {'post_id': post_id, 'name': name, 'age': age}