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

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

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

  • 相关阅读:
    什么是RPA机器人?RPA机器人能做什么?RPA机器人的应用场景
    ubuntu22.04编译PBRT-v4
    什么是Wi-Fi保护设置(WPS),以及如何使用它?这里有详细解释
    基于Python的数据科学(7):Pandas基础
    【校招VIP】产品思维考察之创意能力
    信息化发展34
    0动态规划中等 LeetCode1014. 最佳观光组合
    流量分析(5.5信息安全铁人三项赛数据赛题解)
    Spring Boot 启动流程
    深度学习基础知识 学习率调度器的用法解析
  • 原文地址:https://blog.csdn.net/myli_binbin/article/details/126543431