• FastAPI 学习之路(十四)响应模型


    我们可以在我们不同的请求路径的返回参数使用相应模型。接下来看一个简单的demo

    1. from fastapi import FastAPI
    2. from typing import Optional
    3. from pydantic import BaseModel
    4. class One(BaseModel):
    5. name: str
    6. description: Optional[str] = None
    7. price: float
    8. tax: Optional[float] = None
    9. app = FastAPI()
    10. @app.post("/items", response_model=One)
    11. def read_items(item: One):
    12. return item

    我们可以看下,接口的正常返回

     response_model是装饰器方法(get,post等的)一个参数,不像之前的所有的参数和请求体,它不属于路径操作参数。

    它接收的类型与你将为Pydantic模型属性所声明的类型相同,因此它可以是一个Pydantic模型,但也可以是一个由Pydantic模型组成的list,例如List[Item].

    FastAPI将使用此response_model来:

            将输出的数据转换为其声明的类型。

            校验数据。

            在OpenApi的路径操作中为响应添加一个JSON Schema。

            并在自动生成文档系统中使用

    最重要的是:

            会将输出数据限制在该模型定义内。

    我们下面做一个演示,我们正常的都应该知道,我们去创建用户的时候呢,我们的密码是明文的,我们要返回的用户信息中,不能携带我们的密码,我们应该如何处理呢,其实也很简单。

    1. from fastapi import FastAPI
    2. from typing import Optional
    3. from pydantic import BaseModel
    4. app = FastAPI()
    5. class UserIn(BaseModel):
    6. username: str
    7. password: str
    8. email: str
    9. full_name: Optional[str] = None
    10. class UserOut(BaseModel):
    11. username: str
    12. email: str
    13. full_name: Optional[str] = None
    14. @app.post("/user", response_model=UserOut)
    15. def create_user(user: UserIn):
    16. return user

    我们看下接口的实际返回

    我们看下接口的文档的展示

    我们在接口的请求中,如果不传递,我不想要返回带默认值的

    我们看下代码如何实现的

    1. from fastapi import FastAPI
    2. from typing import Optional
    3. from pydantic import BaseModel
    4. app = FastAPI()
    5. class UserIn(BaseModel):
    6. username: str
    7. password: str
    8. email: str
    9. full_name: Optional[str] = None
    10. class UserOut(BaseModel):
    11. username: str
    12. email: str
    13. full_name: Optional[str] = None
    14. @app.post("/user", response_model=UserOut, response_model_exclude_unset=True)
    15. def create_user(user: UserIn):
    16. return user

    其实就是response_model_exclude_unset来处理,我们看下实际的效果

    那么这个时候,我们传递了呢。

    可以看到,我们传递了参数就可以正常的展示,不传递参数的,我们不返回默认的值。

  • 相关阅读:
    【力扣白嫖日记】626.换座位
    简简单单搞一个实用的Android端搜索框
    【宝塔面板建站】本地连接云服务器的数据库 以阿里云服务器为例子(保姆级图文)
    p4v搭建UE4引擎,没弄好导致运行项目老出问题
    GitHub 上线重量级分布式架构原理设计笔记,开源的东西看着就是爽
    【SpringCloud-学习笔记】Ribbon负载均衡
    第一章《初学者问题大集合》第8节:Java程序初步释疑
    CloudCompare&PCL FPFH描述子
    【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)
    P1941 [NOIP2014 提高组] 飞扬的小鸟
  • 原文地址:https://blog.csdn.net/myli_binbin/article/details/126543431