码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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来处理,我们看下实际的效果

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

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

  • 相关阅读:
    持续集成(CICD)- Jenkins插件安装失败解决办法
    你不知道的原生js广播频道接口
    SQL数据迁移实战:从产品层级信息到AB测试表
    机器学习5-线性分类器,Knn算法,朴素贝叶斯分类器,文本挖掘
    如何用python一键保存绝美***壁纸?
    电脑上播放4K视频需要具备哪些条件?
    LiveNVR监控流媒体Onvif/RTSP功能-Onvif 发现以及探测通过ONVIF添加摄像头监控直播及云台控制
    Conmi的正确答案——linux硬盘管理命令(持续更新中)
    Debian | Vscode 安装与配置 C 环境
    ChatGPT付费创作系统V2.8.4独立版 WEB+H5+小程序端 (新增Pika视频+短信宝+DALL-E-3+Midjourney接口)
  • 原文地址:https://blog.csdn.net/myli_binbin/article/details/126543431
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号