fastapi(七)Body

FASTAPI 11-请求BODY的嵌套模型创建 使用 FastAPI,你可以定义、校验、记录文档并使用任意深度嵌套的模型,使用Pydantic创建模型定义一个出版社的模型, 将子模型用作Book模型的public属性的类型gt=0,"小说","杂志"],"tags":["python","java"],"public":{"public_name":"工业出版社","public_address":"中国"仅仅进行这样的声明,你将通过 FastAPI 获得:对被嵌入的模型也适用的编辑器支持(自动补全等) 阅读详情

我们已经提到过Path以及Query,下面来看看更好的对于请求正文的声明

body-多个参数
混合Path,Query和请求正文参数
eg:

from fastapi import FastAPI, Path
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


@app.put("/items/{item_id}")
async def update_item(
    *,
    item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000),
    q: str = None,
    item: Item = None,
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    if item:
        results.update({"item": item})
    return results

多个请求正文参数

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


class User(BaseModel):
    username: str
    full_name: str = None


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item, user: User):
    results = {"item_id": item_id, "item": item, "user": user}
    return results

请求body:

{
    "item": {
        "name": "Foo",
        "description": "The pretender",
        "price": 42.0,
        "tax": 3.2
    },
    "user": {
        "username": "dave",
        "full_name": "Dave Grohl"
    }
}

body中的单个值参数
因为在fastapi中默认将单个值识别为查询参数所以
fastapi提供了Body,类似Path、Query
。。。
@app.put("/items/{item_id}")
async def update_item(
*, item_id: int, item: Item, user: User, importance: int = Body(…)
):
。。。

然后请求主体就是:
{
“item”: {
“name”: “Foo”,
“description”: “The pretender”,
“price”: 42.0,
“tax”: 3.2
},
“user”: {
“username”: “dave”,
“full_name”: “Dave Grohl”
},
“importance”: 5
}

嵌入单个请求主体参数
当只有单个请求主体参数时,默认fastapi只会直接读取其主体。
但是当想要一个json带有key,item在请求正文中,可以使用embed

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item = Body(..., embed=True)):
    results = {"item_id": item_id, "item": item}
    return results

请求主体为:

{
    "item": {
        "name": "Foo",
        "description": "The pretender",
        "price": 42.0,
        "tax": 3.2
    }
}

body-fields
在pydantic模型内部使用Field来声明验证和metadata
eg:

from fastapi import Body, FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = Field(None, title="The description of the item", max_length=300)
    price: float = Field(..., gt=0, description="The price must be greater than zero")
    tax: float = None


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item = Body(..., embed=True)):
    results = {"item_id": item_id, "item": item}
    return results

额外的json schema
在field,path,query,body中,可以声明额外的部分。
这些参数将被添加到json格式输出。
eg:

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


@app.put("/items/{item_id}")
async def update_item(
    *,
    item_id: int,
    item: Item = Body(
        ...,
        example={
            "name": "Foo",
            "description": "A very nice Item",
            "price": 35.4,
            "tax": 3.2,
        },
    )
):
    results = {"item_id": item_id, "item": item}
    return results

然后在docs中显示为:
在这里插入图片描述
Body-嵌套模型
List fields
可以定义一个属性是子类型,例如list
eg:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    tags: list = []


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item):
    results = {"item_id": item_id, "item": item}
    return results

其中tags,可以进行子类型验证
eg:
from typing import List
…
tags:List[str]=[]
…
拥有子类型的类型包括:list,dict,tuple等。
set type
from typing imoprt Set
…
tags:Set[str]=set()
…

嵌套模型

eg:

from typing import Set

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Image(BaseModel):
    url: str
    name: str


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    tags: Set[str] = []
    image: Image = None

特别的类型和验证
除了常规的单类型,str,int,float等,你可以使用更复杂的继承自str的单类型。
可以在Pydantic exotic types
中查看更多的类型。
例如,在字段中有一个url field,我们可以将它声明为HttpUrl 去代替str

from pydantic import BaseModel, HttpUrl
class Image(BaseModel):
    url: HttpUrl
    name: str
    

这个url字段将被验证是否是正确的Url。
list中也可使用子模型。
images: List[Image] = None

注意:如果事前不知道传送的body中key是什么,可以直接使用
async def create_index_weights(weights: Dict[int, float]):…
body中拥有int类型的key和float类型的值。

FASTAPI系列 09-POST请求BODY校验添加Field 使用 Pydantic 的 Field 在 Pydantic 模型内部声明校验和元数据。你可以使用 Pydantic 的 Field 为模型属性声明额外的校验和元数据。你还可以使用额外的关键字参数来传递额外的 JSON Schema 元数据。 阅读详情

相关推荐

FastAPI 3 - Request Body

文章目录一、Body Multiple Parameters1、2、3、Body embed4、二、 Body Fields1、Field 字段验证2、example 的使用三、Body Nested Models1、嵌套 List、Set 类型2、嵌套其他模型3、特殊类型和验证四、额外数据类型 Extra Data Types1、time,uuid2、设置模型数据类型 学习自:https://www.bilibili.com/video/BV1sE411x7bi 一、Body Multiple Pa

AI工程化、开源分享、文档翻译、代码笔记 2369

[Python FastApi] FastApi中Body的参数详解

fastapi 接口中只有一个参数时候,为遵循json传参规则,则会转换为传递一个字符串。若想保持一致,则在参数定义时候设置属性embed为True即可,默认为False。

在夜里,所有人都会失去年龄。 3464

python系列:FASTAPI系列 09-POST请求BODY校验添加Field

FASTAPI系列 09-POST请求BODY校验添加Field

weixin_54626591的博客 649

FastAPI学习-11. 请求body - 嵌套模型

前言 使用FastAPI,你可以定义、校验、记录文档并使用任意深度嵌套的模型(归功于Pydantic) List 字段 你可以将一个属性定义为拥有子元素的类型。例如 Pythonlist: from typing import Union from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() ...

qq_27371025的博客 710

【GD32篇】驱动AD7616完成数据采集

GD32F10X驱动AD7616完成数据采集

we_long的博客 1万+

R3LIVE 1.0 适配 Velodyne 16线雷达:3步配置解决150米漂移问题

本文详细解析了R3LIVE 1.0适配Velodyne 16线雷达时出现的150米漂移问题,并提供三步配置方案。通过调整雷达类型设置、运动补偿与时间对齐、视觉-激光联合优化等关键参数,有效解决了系统漂移问题,提升定位精度。适用于机器人定位与建图领域的开发者。

weixin_29054195的博客 269

FastAPI获取Body

FastAPI获取Body

oscarli的博客 1470

华为eNSP与VMware虚拟机联动实战:从零搭建仿真网络环境

本文详细介绍了如何从零开始搭建华为eNSP与VMware虚拟机的联动仿真网络环境。通过环境准备、网络适配器配置、eNSP与VMware网络集成、安全策略与NAT配置等步骤,帮助读者掌握构建企业级网络实验场景的关键技术。这种组合特别适合网络工程师进阶训练和华为认证考试准备,实现低成本、高灵活性的网络仿真实验。

weixin_30415113的博客 504

FastAPI-Body、Field

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

qq_41081716的博客 940

将MathType、zotero嵌入Word、WPS

最近也是慢慢学起了写文稿之类的内容,在写论文的时候,肯定会遇到一些数学公式的插入,如果使用wps、word等自带的插入公式,一般不符合投稿期刊的格式要求,而且不方便、不美观,故开始研究MathType 这款插入公式的工具。

2401_83617940的博客 2276

【TIDB】TiDB认证考试PTCA 练习题 题库

TiDB认证考试PTCA 练习题 题库

DBA之路的博客 4721

FastAPI框架中的默认request_body参数、requirements.txt 的应用 及 FastAPI对请求参数的验证Path, Query, Body

FastAPI在使用其生成的docs接口文档时,经常需要我们输入一些json参数,但实际上这些参数我们调用的时候都是默认的,比如分页数据page一般都是1,pagesize也是,而BaseModel的参数default并不能直接传递到接口文档上request_body中的json中来,很不方便。FastApi使用的是Pydantic模型,Pydantic模型中BaseModel如果要设置默认请求数据示例。

本博客记录了从2014年以来在工作学习中遇到的技术问题、解决方法以及部分个人人生经历、经验等内容。 1398

智能温室:温室环境监测_(7).土壤监测技术包括pH值和电导率

土壤的pH值是指土壤溶液的酸碱度,它对植物的营养吸收和生长发育有着重要的影响。在智能温室中,土壤监测是非常重要的一个环节,因为土壤的pH值和电导率直接影响植物的生长和健康。本节将详细介绍如何利用传感器和数据处理技术来监测土壤的pH值和电导率,并提供具体的代码示例。在智能温室中,监测到的土壤pH值和电导率数据需要传输到中央控制系统进行进一步的处理和分析。通过以上步骤,您可以构建一个完整的智能温室土壤监测系统,实时监控土壤的pH值和电导率,确保植物在最佳的生长环境中。校准通常包括在已知电导率的标准溶液中进行。

zhubeibei168的博客 1408

【FastAPI】学习笔记与记录-01-Body

FastAPI Body 可选body参数 设置Body参数默认值为None,则可以设置为可选参数 # coding=utf-8 """ 通过设置Body参数的默认值为None,将body 参数设置为可选项 """ from fastapi import FastAPI ,Path from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name : str description : str =

1119

【人工智能-数据集】RML2018 时域信号的时序信号和星座图的图片信号生成方式(可用于多模态特征融合)

RML2018(RadioML 2018)数据集是一个广泛用于无线通信信号识别的开源数据集。它包含了多种调制方式(如OOK、QPSK、16QAM等)在不同信噪比下的信号样本。这些数据以 HDF5 格式存储,适用于大规模的数据处理和分析。数据集特点:多调制方式:涵盖24种不同的调制方式。多信噪比:包括从-20 dB到30 dB的26种信噪比。大规模样本:每种调制方式和信噪比下包含4096个样本。数据切分:将原始的 HDF5 数据集按照调制方式和信噪比切分成单个文件,便于后续处理。样本选择。

若北辰 971

【FISCO BCOS】二十、多机部署区块链

实际开发中,为了满足高可用性和高容错性的需求,往往会采用多级部署区块链的方式,今天介绍一下FISCO BCOS的多机部署流程。

naihe_fish的博客 3654

FastAPI(10)- 详解 Body

前言 上一篇有讲到将参数类型指定为 Pydantic Model,这样 FastAPI 会解析它为一个 Request Body 那单类型(int、float、str、bool...)参数可以成为 Request Body 的一部分吗?答案是可以的 通过 Body 函数即可完成,和 Path、Query 有异曲同工之妙 文章跳转 Query Path Request Body Body 主...

qq_33801641的博客 675

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

FastAPI 中Body、Cookie、Header、Query和 Path的区别

在 FastAPI 中,BodyCookieHeaderQuery和Path是用于定义请求参数的工具。它们的作用是从 HTTP 请求的不同部分提取数据,并对其进行验证和描述。

weixin_56670311的博客 1257

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Fastapi中Depends、Form、Query、Body、File区别

方法适用场景传输方式curl示例Depends依赖注入(权限验证、数据库等)N/AForm表单数据提交(登录、注册)QueryURL 查询参数(GET 请求)?key=valueBody解析 JSON 数据(POST、PUT 请求)File文件上传不同的参数解析方式适用于不同的 HTTP 请求场景,可以结合curl命令进行测试和调试。

722

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

FastAPI 请求体多参数支持:Path、Query 与 Body 的灵活组合

本文深入讲解了 FastAPI 中如何灵活组合使用请求体的多个参数,包括 `Path`、`Query` 和 `Body`,以构建更加丰富的 API 接口。通过 Pydantic model 声明请求体参数,开发者可以轻松实现多请求体参数校验,如 `item` 和 `user` 的嵌套传递。文章还介绍了请求体额外参数的声明方式、查询参数的隐式使用、以及 `embed` 功能,允许开发者将模型内容嵌入到请求体的指定键中,从而提高 API 的可读性与数据管理的一致性。完整代码示例展示了多参数场景下的实用方法。

敲代码别忘了喝上一杯凉白开。 1440

构建现代API:FastAPI中Query与Body参数的最佳搭配

Query: 用于处理URL查询参数,即URL中?后面的部分。Body: 用于处理请求体中的数据,通常用于处理POST、PUT等请求中的JSON数据。Query从URL查询字符串中获取数据,而Body从请求体中获取数据。此外,它们可以有不同的验证条件,但这些条件的使用方式是相似的。你可以使用相同的验证器,如gtgemin_lengthmax_length等,来确保数据符合预期的要求。

984

Path、Query、Body,FastAPI 参数系统别再混了

本文详细讲解了FastAPI中的三种核心参数类型: Path路径参数 - 定位资源(如/book/3) Query查询参数 - 筛选分页(如?page=1) Body请求体 - 提交复杂数据(如POST JSON) 关键区别在于: 路径参数是URL的一部分,通常必填 查询参数在?后,常带默认值 请求体用于POST/PUT的复杂数据 调试时注意422错误的loc字段定位问题参数位置。实际开发中,路径参数定位资源,查询参数处理筛选,请求体负责创建/更新内容。通过Pydantic模型可以方便地进行参数校验和类型转

风雨未有归期的博客 357

python fastapi body大小

我整理的一些关于【CI】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=iqhDF2使用 FastAPI 实现请求体大小限制 在这篇文章中,我们将学习如何在 FastAPI 应用程序中限制请求体的大小。要实现这一功能,我们通常需要以下步骤: 步骤 描述 ...

weixin_33484805的博客 697

Python 的 FastApi 如何在request 重复取request.body()

需要再中间件中获取body 中的信息 但是 又想要在之后 还可以重复取 这个body 因为有的接口写法是直接从body中获取参数,然而这个body是数据流的形式,一旦取一次就导致后面取不到里面的值了。

时光冉冉,我们都在变 1182

fastAPI(2)--请求参数、路径参数、多body

1.请求参数附加信息 #!/usr/bin/env python # encoding: utf-8 from fastapi import FastAPI, Query from typing import Optional import uvicorn app = FastAPI() @app.get('/items/') async def read_items(q: Optional[str] = Query(None, min_length=3, max_length=50)):

西卡卡的博客 1454

FastAPI框架对请求参数的接收验证Path, Query, Body

FastAPI框架自带了对请求参数的验证,包括在路径中的参数、请求的参数以及Body中的参数,使用Path提取和验证路径参数;使用Query提取和验证?请求中的参数,使用Body将参数让客户端由body(默认application/json方式)传入。#示例python代码 from fastapi import FastAPI , Path , Query , Body。

高压锅博客 2191
上一篇: fastapi(六)路径参数和数值验证
下一篇: fastapi(八)额外的数据类型-Cookie
vanexph
博客等级 码龄15年 4015粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值