• 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来处理,我们看下实际的效果

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

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

  • 相关阅读:
    Jquery
    丝丝入扣,毫不违和,AI一键换脸和微调,基于Rope-Ruby,2024最新整合包
    linux粘滞位的介绍及使用
    一种多源信息融合方法及其应用(Matlab代码实现)
    Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器
    【408专项篇】C语言笔记-第五章(一维数组与字符数组)
    算法通过村第十八关-回溯|白银笔记|经典问题
    20天能拿下PMP吗?
    分布式事务
    docker-compose + elasticsearch7.6(配置密码及证书) + kibana7.6 + elasticsearch-head搭建集群
  • 原文地址:https://blog.csdn.net/myli_binbin/article/details/126543431