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

FastAPI-Body、Field

参考:模式的额外信息 - 例子 - FastAPI

在FastAPI中,BodyField是两个常用的注解,它们用于定义请求体中的数据或路径参数、查询参数等的处理方式。这两个注解都来自于Pydantic库,用于数据验证和解析,但它们的应用场景有所不同。

Body

Body是一个注解,用来指示FastAPI从HTTP请求的主体(即请求体)中读取数据,并根据提供的模型或类型进行解析和验证。当期望客户端通过POST、PUT等方法发送JSON对象或其他格式的数据时,就会用到Body它常与Pydantic的模型类一起使用来定义请求体的结构

Field

Field是Pydantic模型类中用于定义模型字段属性的一个方法。它允许你为模型的字段添加额外的元数据,比如默认值、标题、描述等Field通常不直接用于FastAPI的路由定义中,而是用于定义Pydantic模型的结构,这些模型随后可能作为Body、查询参数、路径参数等使用。

举例:

from typing import List, Set, Union, Optional
import uvicorn
from fastapi import FastAPI, Body
from pydantic import BaseModel, HttpUrl, Field
from typing_extensions import Annotated# 初始化FastAPI应用程序
app = FastAPI()# 定义Item模型,表示商品项的属性
class Item(BaseModel):name: strdescription: Union[str, None] = Noneprice: floattax: Union[float, None] = None# 定义Item_1模型,与Item类似,但提供了更详细的字段示例
class Item_1(BaseModel):name: str = Field(examples=["Foo"])description: Union[str, None] = Field(default=None, examples=["A very nice Item"])price: float = Field(examples=[35.4])tax: Union[float, None] = Field(default=None, examples=[3.2])# 更新物品信息的API端点
# 接收一个item_id参数和一个Item实例作为请求体
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):results = {"item_id": item_id, "item": item}return results# 另一个更新物品信息的API端点,使用了更详细的Annotated注解来指定请求体的期望格式
@app.put("/items_1/{item_id}")
async def update_item(item_id: int,item: Annotated[Item_1,Body(examples=[{"name": "Foo","description": "A very nice Item","price": 35.4,"tax": 3.2,}],),],
):results = {"item_id": item_id, "item": item}return results# 主函数,用于启动FastAPI应用程序
# 注释中提供了两种运行模式:线上模式和调试模式
# 主函数,用于启动FastAPI应用程序
if __name__ == "__main__":## 线上模式# uvicorn.run("abr_server:app", host="0.0.0.0", port = 1218)## debug 模式uvicorn.run("test4:app", host="0.0.0.0", port=1218, reload=True, )

http://www.lryc.cn/news/386158.html

相关文章:

  • 软件设计师笔记-操作系统知识(二)
  • 鸿蒙UI开发快速入门 —— part12: 渲染控制
  • 添加用户页面(Flask+前端+MySQL整合)
  • 素数筛(算法篇)
  • 迁移Microsoft Edge
  • Maven高级理解属性
  • Trilium Notes浏览器插件保存网页内容到docker私有化部署
  • C++ 统计二进制串中0出现的个数
  • note-网络是怎样连接的6 请求到达服务器,响应返回浏览器
  • 存储过程与函数:封装数据库逻辑的艺术(七)
  • 【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】卷积
  • Trie字符串统计
  • Kali Linux源
  • 【RT摩拳擦掌】基于RT106L/S语音识别的百度云控制系统
  • 国标GB28181视频汇聚平台EasyCVR设备展示数量和显示条数不符的原因排查与解决
  • FastAPI教程I
  • 如何在 HTML 中实现响应式设计以适应不同设备的屏幕尺寸?
  • 【基础篇】第1章 Elasticsearch 引言
  • 在区块链技术广泛应用的情况下,C 语言如何在区块链的底层开发中发挥更有效的作用,提高性能和安全性?
  • 量化投资 日周月报 2024-06-28
  • 基于 Paimon 的袋鼠云实时湖仓入湖实战剖析
  • IPython相关了解
  • 华为面试题及答案——机器学习(二)
  • PlatformIO开发环境
  • In install.packages(“devtools“, verbose = TRUE) :
  • 计算机网络 访问控制列表以及NAT
  • 使用Oracle IMP导入数据
  • C++ 100 之 容器插入和删除
  • 提升 Selenium 测试稳定性的秘诀:深入理解等待 API 的使用
  • Python-算法编程100例-滑动窗口(入门级)