FastAPI请求体-多个参数

路径参数、查询参数,和请求体混合

首先,我们需要导入所需的库。我们将使用FastAPI、Path和Annotated来处理路由和参数,并使用BaseModel和Union来自定义数据模型。

完整示例代码

from typing import Annotated, Unionfrom fastapi import FastAPI, Path
from pydantic import BaseModelapp = FastAPI()class Book(BaseModel):title: strauthor: Union[str, None] = Nonepages: int@app.put("/books/{book_id}")
async def update_book(book_id: Annotated[int, Path(title="The ID of the book to get", ge=0, le=1000)],q: Union[str, None] = None,book: Union[Book, None] = None,
):results = {"book_id": book_id}if q:results.update({"q": q})if book:results.update({"book": book})return results

代码分析

class Book(BaseModel):title: strauthor: Union[str, None] = Nonepages: int

定义一个自定义的数据模型类。在这个例子中,我们将创建一个名为Book的类,它包含以下字段:title(字符串)、author(字符串,可选)和pages(整数):

接下来,我们定义一个带有查询参数和路径参数的路由。这个路由将用于更新一本书的信息:

@app.put("/books/{book_id}")
async def update_book(book_id: Annotated[int, Path(title="The ID of the book to get", ge=0, le=1000)],q: Union[str, None] = None,book: Union[Book, None] = None,
):results = {"book_id": book_id}if q:results.update({"q": q})if book:results.update({"book": book})return results

在这个例子中,我们定义了一个PUT请求的路由,其路径为"/books/{book_id}"。我们使用了Path对象来指定路径参数book_id的约束条件:大于等于0且小于等于1000。

我们还添加了一个名为q的查询参数,它可以是字符串或None。

最后,我们添加了一个名为book的参数,它可以是一个Book对象或None。这个参数允许用户在请求体中传递书籍的详细信息。

打开自动化测试文档,我们可以看到如下内容
在这里插入图片描述
发起请求进行测试
在这里插入图片描述

总结

通过使用FastAPI、Path和Annotated,你可以轻松地定义具有复杂参数的路由。同时,使用Pydantic的BaseModel可以让你更方便地定义数据模型并自动进行数据验证。

多个请求体

完整示例代码

from typing import Unionfrom fastapi import FastAPI, Body
from pydantic import BaseModelclass Product(BaseModel):name: strdescription: Union[str, None] = Noneprice: floattax: Union[float, None] = Noneclass Customer(BaseModel):username: strfull_name: Union[str, None] = Noneapp = FastAPI()@app.put("/products/{product_id}")
async def update_product(product_id: int, product: Product = Body(...), customer: Customer = Body(...)):results = {"product_id": product_id, "product": product, "customer": customer}return results

这段代码定义了一个FastAPI应用,该应用可以处理一个PUT请求,这个请求包含了商品信息和客户信息。下面是对这段代码的详细解释。

首先,我们导入了所需的库:

from typing import Unionfrom fastapi import FastAPI, Body
from pydantic import BaseModel

然后,我们定义了两个模型类:Product和Customer:

class Product(BaseModel):name: strdescription: Union[str, None] = Noneprice: floattax: Union[float, None] = Noneclass Customer(BaseModel):username: strfull_name: Union[str, None] = None

这两个类分别代表商品和客户。它们都是BaseModel的子类,这意味着它们可以被用于解析JSON数据。

接下来,我们创建了一个FastAPI应用实例:

app = FastAPI()

最后,我们编写了一个路由处理器函数:update_product:

@app.put("/products/{product_id}")
async def update_product(product_id: int, product: Product = Body(...), customer: Customer = Body(...)):results = {"product_id": product_id, "product": product, "customer": customer}return results

这个函数接收三个参数:商品ID、商品和客户。其中,商品和客户是通过Body装饰器从请求体中获取的。当客户端发起PUT请求到"/products/{product_id}"时,FastAPI会自动将请求体中的JSON数据转换为Product和Customer对象。

嵌套参数

from typing import Annotated, Unionfrom fastapi import Body, FastAPI
from pydantic import BaseModelapp = FastAPI()class Book(BaseModel):name: strdescription: Union[str, None] = Noneprice: floattax: Union[float, None] = None@app.put("/books/{book_id}")
async def update_book(book_id: int, book: Annotated[Book, Body(embed=True)]):results = {"book_id": book_id, "book": book}return results

效果
在这里插入图片描述

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

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

相关文章

剪切板管理 Paste中文 for Mac

Paste是一个方便的剪贴板管理工具,它可以帮助你更好地组织、查找和管理剪贴板中的内容。它提供了历史记录、搜索、组织、格式处理和云同步等功能,使你能够更高效地使用剪贴板,并节省时间和精力。无论是在个人使用还是团队协作中,P…

linux云服务器开启防火墙注意事件

重要的事情先说三遍: linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! 也就是能打开这个页面: 为什么这么说呢?如果你…

11.Java安卓程序设计-基于SSM框架的Android平台健康管理系统的设计与实现

摘要 随着人们生活水平的提高和健康意识的增强,健康管理系统在日常生活中扮演着越来越重要的角色。本研究旨在设计并实现一款基于SSM框架的Android平台健康管理系统,为用户提供全面的健康监测和管理服务。 在需求分析阶段,我们明确了系统的…

帆软报表决策报表改变屏幕大小后出现字体大小或滚动条异常解决方案:双向自适应

帆软报表决策报表改变屏幕大小后出现字体大小或滚动条异常。 解决方案:在模板和报表块中配置双向自适应 在每一个报表块中设置:

十五届蓝桥杯分享会(一)

注:省赛4月,决赛6月 一、蓝桥杯整体介绍 1.十四届蓝桥杯软件电子赛参赛人数:C 8w,java/python 2w,web 4k,单片机 1.8w,嵌入式/EDA5k,物联网 300 1.1设计类参赛人数:平…

护士执业资格考试报名照片要求和免审核上传攻略

新一年度的护考报名又开始啦,护理专业实行“双证书”制,只有具备毕业证护士执业资格证才能正式成为一名“白衣天使”,因此,护考报名关乎职业前程。目前已经进入护考的报名时间,很多朋友反映注册进入报名系统第一步就是…

yum源不起作用_yum无法安装程序_Linux默认源替换---Linux工作笔记067

今天在一台机器上进行安装yum install的时候提示,yum不可用,这时候,折腾了一会 后来更换了默认源就可以了. 首先: 可以看到原来的里面有个 yum.repos.d 里面放了很多源,但是这些源是不可以联网的. 是内网的源,所以,我对他进行了 mv yum.repos.d yum.repos.d.bak 重命名 然…

线性索引与行列号索引

一、含义 线性索引,顾名思义就是说把图像矩阵展平,相当于变成一维的图像数组,故像素点的线性索引就是其在图像数组中的索引值 行列号索引,对于一个二维的图像矩阵有行有列,知道行号和列号就可以唯一确定一个点的位置…

java基础之循环

Java中有三种主要的循环结构&#xff1a; while 循环do…while 循环for 循环 1、while循环 1.1、结构 while( 布尔表达式 ) { //循环内容 } 1.2、实例 public class TestWhile {public static void main(String[] args) {int x 1;while (x<10){System.out.println("…

阿里云通义千问720亿参数模型开源,适配企业级、科研级高性能应用

12月1日&#xff0c;阿里云举办通义千问发布会&#xff0c;开源通义千问720亿参数模型Qwen-72B。Qwen-72B在10个权威基准测评创下开源模型最优成绩&#xff0c;成为业界最强开源大模型&#xff0c;性能超越开源标杆Llama 2-70B和大部分商用闭源模型。未来&#xff0c;企业级、科…

Spring Cloud + Vue前后端分离-第2章 使用Maven搭建SpringCloud项目

Spring Cloud Vue前后端分离-第2章 使用Maven搭建SpringCloud项目 Maven两大核心功能&#xff1a; 依赖管理&#xff08;Jar包管理&#xff09; 构建项目&#xff08;项目打包&#xff09; 使用Eureka搭建注册中心 使用spring initializr创建spring cloud项目 SpringCloud…

FastAPI之声明请求参数示例数据

在Pydantic模型中添加额外的JSON模式数据 您可以声明Pydantic模型的示例&#xff0c;这些示例将被添加到生成的JSON模式中。 示例代码 from fastapi import FastAPI from pydantic import BaseModelapp FastAPI()class Item(BaseModel):name: strdescription: str | None …

(C语言实现)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我们分享用C语言实现高精度除法&#xff0c;可通过该题测试点我点我&#xff0c;洛谷 p2005。 那么话不多说我们开始吧。 讲解 大家还记不记得小学的时候我们是怎么做除法的&#xff1f;我们以1115为例。 我们的高精度除法也将采用这个思路进行&#xff0c;分别用两…

Python-算术运算符详解

运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 算术运算符&#xff1a;加减乘除 %求余 **平方 // 先算乘方&#xff0c;再算乘除&#xff0c;最后是加减。括号可以改变优先级 0不能作为除数&#xff08;不论是整型0还是浮点0&#xff09; 除法截断&#xff1a;舍弃小…

UDP群聊

客户端 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

使用VBA快速统计词组(单词组合)词频

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计词组词频。想必各位小伙伴都指定如何使用字典对象实现去重&#xff0c;进而实现单个单词的词频统计。 但是统计词组词频就没有那么简单了&#xff0c;为了便于演示&#xff0c;此处的词组只限于两个单词的组合。…

【解决办法】Pycharm中新添加或者导入项目文件名红色!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、问题描述二、问题原因三、解决办法 一、问题描述 Pycharm的代码中添加新的文件夹&#xff0c;发现文件夹下的文件名是红色的&#xff0c;如下图&#xff1a; …

设计模式——单例模式(Singleton Pattern)

概述 单例模式确保一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供整个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点&#xff1a;一是某个类只能有一个实例&#xff1b;二是它必须自行…

Java---线程讲解(二)

文章目录 1. Runnable接口2. 卖票案例3. 同步代码块解决数据安全问题4. 同步方法解决数据安全问题5. 线程安全的类6. Lock锁 1. Runnable接口 1. 创建线程的另一种方法是声明一个实现Runnable接口的类&#xff0c;之后重写run()方法&#xff0c;然后可以分配类的实例&#xff0…