三、FastApi-响应模型

为了演示方便,上面示例都是直接返回一个字典dict,来代替响应模型,正常情况下,会封装个通用模型,并通过方法调用,好处有以下几点:

  • 保持输出结构整体风格统一

  • 新增通用字段,不用在每个接口都赋值,比如时间戳等;

  • 对响应内容统一加日志,这样就不用在每个接口都加上一遍;

  • 针对错误会有些报警之类的处理,在统一地方加即可;

1 定义结构

{
    "code":200,
    "msg":"处理成功",
    "data": "qqq"
}

2 定义模型

新增文件 parameter/http_resp.py,内容如下:

class HttpResponse(BaseModel):
    """http统一响应"""
    code: int = Field(default=200)  # 响应码
    msg: str = Field(default="处理成功")  # 响应信息
    data: Any | None  # 具体数据
    additional: Additional  # 额外信息

3 响应方法

新增文件 parameter/http_resp.py,内容如下:

def ResponseSuccess(resp: Any) -> HttpResponse:
    """成功响应"""
    currentTime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return HttpResponse(
        data=resp
    )

def ResponseFail(resp: Any) -> HttpResponse:
    """响应失败"""
    return HttpResponse(
        data=resp
    )

4 使用实例

(1)定义接口  

在  router 下,新增demo_router.py文件,内容如下:

from typing import Union
# 导入APIRouter
from fastapi import APIRouter
from pydantic import ValidationError

# 实例化APIRouter实例
router = APIRouter(tags=["默认路由"])
# 如果没有优化导入,这行会报错
from parameter.demo_param import DemoParam,StudentParam,ClassInfoParam,NestedParam,FieldParam
from parameter import PydanticVerifyParam
from parameter import http_resp

router = APIRouter(
    prefix="/demo",
    tags=["演示接口"]
)

@router.post("/resp/demo", summary="响应模型示例")
async def respDemo(param: FieldParam) -> http_resp.HttpResponse:
    """
    响应模型示例-演示
    """
    if "游戏" in param.likes:
        return http_resp.ResponseFail("禁止玩游戏~")


    return http_resp.ResponseSuccess(param)

(2)请求调用

  URL: http://localhost:8000/demo/resp/demo

  参数:

{
        "name": "san",
        "age": 0,
        "phone": "一班",
        "likes" : "足球"
}

返回值:

{
  "detail": [
    {
      "type": "list_type",
      "loc": [
        "body",
        "likes"
      ],
      "msg": "Input should be a valid list",
      "input": "足球"
    }
  ]
}

(3)在线生成模型

当我们有了json后,可以直接通过这个 JSON to Pydantic  进行生成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独行客-编码爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值