当前位置: 首页 > article >正文

【自用】fastapi教程第三节--响应与响应体

(1)response_model

是路径操作上的参数
先注意以下概念区分细节,什么是路径操作和路径函数:
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
输出的时候会以userOut的模型类型输出!
(2)路径response model exclude_unset
通过上面的例子,我们学到了如何用response model控制响应体结构,但是如果它们实际上没有存储,则可能要从结果中忽略它们。例如,如果model在NoSQL数据库中具有很多可选属性,但是不想发送很长的JSON响应,其中包含默认值。即排除没有设置的值。
在这里插入图片描述
其他相关参数:
使用路径操作装饰器的 response_model 参数来定义响应模型,特别是确保私有数据被过滤掉。使用response_model exclude_unset 来仅返回显式设定的值。除了 responsee_model exclude_unset 以外,还有 response model exclude defaultsresponse model exclude none我们可以很直观的了解到他们的意思,不返回是默认值的字段和不返回是None的字段。
`responsee_modele_include:只显示某些字段:
在这里插入图片描述只显示name和price字段!

`responsee_modele_exclude:删除某个字段

官方文档:响应模型在这里插入图片描述

响应模型在参数中被声明,而不是作为函数返回类型的注解,这是因为路径函数可能不会真正返回该响应模型,而是返回一个
dict、数据库对象或其他模型,然后再使用 response_model 来执行字段约束和序列化

python查漏补缺

class UserInDB(BaseModel):
    username: str
    hashed_password: str
    email: EmailStr
    full_name: Union[str, None] = None

def fake_password_hasher(raw_password: str):
    return "supersecret" + raw_password

def fake_save_user(user_in: UserIn):
    hashed_password = fake_password_hasher(user_in.password)
    user_in_db = UserInDB(**user_in.dict(), hashed_password=hashed_password)
    print("User saved! ..not really")
    return user_in_db

1.user_in.dict()
是 Python 的字典解包操作符。它会将字典中的键值对解包为关键字参数传递给函数或类构造器。

也就是说,**user_in.dict() 会将 user_in.dict() 返回的字典内容(例如,‘username’: ‘johndoe’)传递给 UserInDB 构造器,作为关键字参数。

例如,假设 user_in.dict() 返回了以下字典:

{
    'username': 'johndoe',
    'password': 'plaintextpassword',
    'email': 'johndoe@example.com',
    'full_name': 'John Doe'
}

那么执行 **user_in.dict() 后,相当于将以下关键字参数传递给 UserInDB 构造器:

username='johndoe', password='plaintextpassword', email='johndoe@example.com', full_name='John Doe'

2.hashed_password=hashed_password

这部分将 hashed_password 作为额外的关键字参数传递给 UserInDB 构造器。这个参数是在 user_in.dict() 中没有的,因此需要单独传入。
在原始的 user_in 数据模型中,可能没有 hashed_password 字段,而是 password 字段。为了加密后保存密码,你计算了 hashed_password,并显式将其传入 UserInDB 构造函数。


http://www.kler.cn/a/382083.html

相关文章:

  • 老域名seo有什么优势?
  • Milvus - GPU 索引类型及其应用场景
  • 利用pythonstudio写的PDF、图片批量水印生成器,可同时为不同读者生成多组水印
  • 高效集成金蝶云星空销售出库单的解决方案
  • kubevirt cloud-init配置
  • 常用的 Lambda 表达式案例解析
  • 智能化在线考试及数据可视化系统
  • C++ 之类和对象
  • 集智书童 | UniMatch V2 推进半监督语义分割极限,以更低训练成本实现更优的语义分割结果-建议收藏!
  • 【网络】数据链路层
  • 基于Qt的独立线程创建与多线程执行实验Demo
  • JAVA读取doc,docx转PDF通过vue展示
  • 基于Multisim拔河比赛游戏+计分电路(含仿真和报告)
  • 华为 HarmonyOS NEXT 原生应用开发:【封装正则API】在原生鸿蒙中使用正则表达式校验登录注册模块(邮箱、密码、手机号)校验
  • 微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
  • WordPress 中最佳的维护服务:入门级用户指南
  • 【机器学习导引】ch4-决策树
  • copyq禁止访问网络(ubuntu cgroup)
  • 发不了Science?那是因为你不会画Science风格的配图
  • 静态数据区,堆,栈
  • linux动态库与静态库
  • 从底层技术到实际应用:Claude与ChatGPT谁更适合学术写作?
  • Redis学习:BitMap/HyperLogLog/GEO案例 、布隆过滤器BloomFilter、缓存预热+缓存雪崩+缓存击穿+缓存穿透
  • 20241106,LeetCode 每日一题,用 Go 实现整数回文数判断
  • Redis(2):内存模型
  • java:题目:用Java实现简单的自取取款操作