fastapi 请求体 - 多个参数 / 字段Field / 嵌套模型

文章目录

    • 1. 混合使用 Path、Query 和请求体参数
    • 2. 多个请求体参数
    • 3. 请求体中的单一值
    • 4. 多个请求体参数和查询参数
    • 5. 嵌入单个请求体参数
    • 6. 字段
    • 7. 嵌套模型
      • 7.1 List 字段
      • 7.2 子模型作为类型
    • 8. 特殊类型校验
    • 9. 带有一组子模型的属性
    • 10. 任意 dict 构成的请求体

learn from https://fastapi.tiangolo.com/zh/tutorial/body-multiple-params/

1. 混合使用 Path、Query 和请求体参数

from fastapi import FastAPI, Path
from typing import Optional
from pydantic import BaseModel
app = FastAPI()class Item1(BaseModel):name: strprice: floatdescription: Optional[str] = Nonetax: Optional[float]@app.put("/items/{item_id}")
async def update_item(*,item_id: int = Path(..., title="id of item to get", ge=0, le=1000),q: Optional[str] = None,item: Optional[Item1] = None,
):res = {"item_id": item_id}if q:res.update({"q": q})if item:res.update({"item": item})return res

在这里插入图片描述

2. 多个请求体参数

from pydantic import BaseModelclass Item(BaseModel):name: strprice: floatdescription: Optional[str] = Nonetax: Optional[float]
class User(BaseModel):username: strfull_name: Optional[str] = None@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item, user: User):res = {"item_id" : item_id, "item" : item, "user": user}return res
  • 使用 参数名称 最为 key 的 字典传入
    在这里插入图片描述

3. 请求体中的单一值

  • 传参时,varname : type = Body(...),如果不这么写,会被作为查询参数 ?varname=xxx
from fastapi import Bodyclass Item(BaseModel):name: strprice: floatdescription: Optional[str] = Nonetax: Optional[float]
class User(BaseModel):username: strfull_name: Optional[str] = None@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item, user: User, importance : int = Body(...)):res = {"item_id" : item_id, "item" : item, "user": user}return res

现在可以写在请求体内:
在这里插入图片描述

4. 多个请求体参数和查询参数

由于默认情况下单一值被解释为查询参数,因此你不必显式地添加 Query,你可以仅执行操作:q: str = None

5. 嵌入单个请求体参数

如果你只有一个请求体参数

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

你的请求体需要写成如下形式:
在这里插入图片描述
如果你想写成 带 key 的 json 形式,添加一个传入参数 embed,item: Item = Body(..., embed=True)
在这里插入图片描述

6. 字段

可以使用 PydanticFieldPydantic 模型内部声明校验和元数据

from fastapi import FastAPI, Path, Body
from typing import Optional
from pydantic import BaseModel, Field
app = FastAPI()class Item(BaseModel):name: strprice: float = Field(..., gt=0, description="price must be greater than 0")description: Optional[str] = Field(None, title="description of item", max_length=30)tax: Optional[float] = None@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(..., embed=True)):res = {"item_id" : item_id, "item" : item}return res

Field 的工作方式和 Query、Path 和 Body 相同,包括它们的参数等等也完全相同

  • 注意,from pydantic import Field

7. 嵌套模型

7.1 List 字段

将一个属性定义为拥有子元素的类型,如 list

class Item(BaseModel):name: strprice: float = Field(..., gt=0, description="price must be greater than 0")description: Optional[str] = Field(None, title="description of item", max_length=30)tax: Optional[float] = Nonetags: list = [] # 没有声明元素类型
  • 具有子类型的 List,from typing import List
tags: List[str] = []

7.2 子模型作为类型

from fastapi import FastAPI, Path, Body
from typing import Optional, List, Set
from pydantic import BaseModel, Field
app = FastAPI()class Image(BaseModel):url:strname: strclass Item(BaseModel):name: strprice: float = Field(..., gt=0, description="price must be greater than 0")description: Optional[str] = Field(None, title="description of item", max_length=30)tax: Optional[float] = Nonetags: Set[str] = []image: Optional[Image] = None@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(..., embed=True)):res = {"item_id" : item_id, "item" : item}return res

在这里插入图片描述

8. 特殊类型校验

  • HttpUrl,检查是不是有效的 URL
from pydantic import BaseModel, Field, HttpUrl
app = FastAPI()class Image(BaseModel):url: HttpUrlname: str

则上面的输入应改的地方 "url":"http://www.michael.com",否则不是有效的 URL

9. 带有一组子模型的属性

  • 更改为 image: Optional[List[Image]] = None
    输入需要改为
    在这里插入图片描述
@app.post("/images/multiple/")
async def create_multiple_images(images: List[Image]):return images

在这里插入图片描述

10. 任意 dict 构成的请求体

from typing import Optional, List, Set, Dict
@app.post("/index-weights/")
async def create_index_weights(weights: Dict[int, float]): # key 为 int, value 为浮点return weights

请记住 JSON 仅支持将 str 作为键。 但是 Pydantic 具有自动转换数据的功能。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ltpa_LTPA Cookie原理

1. 什么是LTPA?Lightweight Third-Party Authentication (LTPA)是IBM Websphere和Domino产品中使用单点登录技术。当服务器配置好LTPA认证方式,用户通过浏览器成功登录后,服务器会自动发送一个session cookie给浏览器;此cookie中包含一个LTP…

fastapi 模式的额外信息,示例 / Cookie参数 / Header参数

文章目录1. Pydantic schema_extra2. Field 的附加参数3. Body 额外参数4. Cookie 参数5. Header 参数5.1 重复的 headerslearn from https://fastapi.tiangolo.com/zh/tutorial/schema-extra-example/ 添加一个将在文档中显示的 example 1. Pydantic schema_extra from typ…

Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法

1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 ; bindService(intent, new MyConn(), BIND_AUT…

LeetCode 1909. 删除一个元素使数组严格递增

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums ,如果 恰好 删除 一个 元素后,数组 严格递增 ,那么请你返回 true ,否则返回 false 。 如果数组本身已经是严格递增的,请你也返回 true 。 数组…

ATS push cache 测试

测试 ATS 注入缓存 参考了: http://serverfault.com/questions/471684/push-content-to-apache-traffic-servers-cache 得到返回:HTTP/1.0 400 Response Not Cachable 搜索得知,头部传入信息太少,必须包含反映时间的项。那个回答应…

fastapi 响应模型 / 响应状态码 / 表单参数

文章目录1. response_model2. 添加输出模型3. 响应模型编码参数4. response_model_include 和 response_model_exclude5. 代码复用:继承6. Union7. 任意 dict 的响应8. 响应状态码9. 表单参数learn from https://fastapi.tiangolo.com/zh/tutorial/response-model/ …

java对象内存模型_Java对象的内存模型

众所周知,函数调用在内存中是通过压栈,退栈实现的,而Java的方法调用则是在JVM栈中通过栈帧实现的,且所有的Java对象都只在堆上分配内存.那么一个Java对象在堆内存里到底长啥样呢?实际上,当一个对…

fastapi 请求文件 / 表单 / 处理错误 / 路径操作配置 / jsonable_encoder

文章目录1. File 参数2. 多文件上传3. 请求表单与文件4. 处理错误5. 自定义响应头6. 自定义异常处理器7. 覆盖默认异常处理器8. 使用 RequestValidationError 的请求体9. 复用 FastAPI 异常处理器10. 路径操作参数配置10.1 status_code,tags10.2 summary&#xff0c…

fastapi PUT更新数据 / PATCH部分更新

文章目录1. PUT 更新2. 用 PATCH 进行部分更新learn from https://fastapi.tiangolo.com/zh/tutorial/body-updates/1. PUT 更新 注意,put 没有指定的值,会被重置为默认值 from typing import List, Optionalfrom fastapi import FastAPI from fastap…

Chrome 扩展 最近的历史 HistoryBar v1.1

说明 以前用过一段时间傲游浏览器,渐渐的习惯了它的鼠标手势和一些细微的人性化的功能。比方地址栏左边的“近期訪问的页面”button。能够方便的找到近期 20 条历史记录。 但后来因为某些原因又回到了 Chrome 的怀抱,于是就没有了这些不起眼但非常好用的…

LeetCode 2047. 句子中的有效单词数

文章目录1. 题目2. 解题1. 题目 句子仅由小写字母(a 到 z)、数字(0 到 9)、连字符(-)、标点符号(!、. 和 ,)以及空格( )组成。 每个句子可以根据空格分解成 …

LeetCode 2048. 下一个更大的数值平衡数(枚举)

文章目录1. 题目2. 解题1. 题目 如果整数 x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。 那么整数 x 就是一个 数值平衡数 。 给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。 示例 1: 输入&#xff1a…

LeetCode 2049. 统计最高分的节点数目(DFS)

文章目录1. 题目2. 解题1. 题目 给你一棵根节点为 0 的 二叉树 ,它总共有 n 个节点,节点编号为 0 到 n - 1 。 同时给你一个下标从 0 开始的整数数组 parents 表示这棵树,其中 parents[i] 是节点 i 的父节点。 由于节点 0 是根,所…

python源文件编码的含义_【原创】Python 源文件编码解读

以下内容源于对 PEP-0263 的翻译和解读,同时给出了一些网上网友的说法。 我是分割线 PEP 0263 -- Defining Python Source Code Encodings【摘要】给出声明 Python 源文件编码的语法。该编码信息后续会被 Python 解析器用于解析源文件。这种方式增强了对源文件中 U…

MyEclipse中SVN的常见的使用方法

本次主要内容: 一 、导入项目 (Checkout)。从svn资源库检出 二 、更新 (Update) 三、锁(对要修改的文件加锁,防止文件冲突) 四、提交(项目修改后的提交) 五、…

fastapi 路径依赖项Depends / 装饰器依赖dependencies / 全局依赖 / 带 yield 的依赖

文章目录1. 依赖项2. 类作为依赖3. 子依赖项3.1 多次使用同一个依赖项4. 路径操作装饰器依赖项5. 全局依赖项6. 带 yield 的依赖项7. 使用带 yield 上下文管理器作为依赖项learn from https://fastapi.tiangolo.com/zh/tutorial/dependencies/ 1. 依赖项 只能传给 Depends 一…

fastapi 安全性 / APIRouter / BackgroundTasks / 元数据 / 测试调试

文章目录1. 例子2. 获取当前用户3. 使用密码和 Bearer 的简单 OAuth24. 使用(哈希)密码和 JWT Bearer 令牌的 OAuth25. 多个应用文件5.1 APIRouter6. BackgroundTasks7. 元数据7.1 标题、描述和版本7.2 openapi_tags 标签元数据7.3 OpenAPI URL7.4 文档 …

java json path_Java使用JSONPath解析JSON完整内容详解

JsonPath是一种简单的方法来提取给定JSON文档的部分内容。 JsonPath有许多编程语言,如Javascript,Python和PHP,Java。JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的js…

LeetCode 2050. 并行课程 III(拓扑排序)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。 同时给你一个二维整数数组 relations ,其中 relations[j] [prevCoursej, nextCoursej] ,表示课程 prevCoursej 必须在课程 nextCoursej 之前…

LeetCode 1521. 找到最接近目标值的函数值(位运算)

文章目录1. 题目2. 解题1. 题目 Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。 请你返回 |func(arr, l, r) - target| 的最小值。 请注意, func 的输入参…