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.rhkb.cn/news/215078.html

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

相关文章

【lesson11】数据类型之string类型

文章目录 数据类型分类string类型set类型测试 enum类型测试 string类型的内容查找找所有女生(enum中)找爱好有游泳的人(set中)找到爱好中有足球和篮球的人 数据类型分类 string类型 set类型 说明: set:集…

C# 任务的异常和延续处理

写在前面 当Task在执行过程中出现异常或被取消等例外的情况时,为了让执行流程能够继续进行,可以使用延续方法实现这种链式处理;还可以针对前置任务不同的执行结果,选择执行不同的延续分支方法。子任务执行过程中的任何异常都会被…

排程系统中关于任务优先级的需求延伸与设计构思

无论是面向销售订单的MPS,还是基于多工序制约关系的APS,还是具体车间生产中针对单一工序的任务作业调度优化,都存在基于被排程对象(例如销售订单、生产工单、工序任务)的优先级进行优化的需求场景。当我们仅在宏观、较高层次的角度考虑&#…

漏洞复现--速达进存销管理系统任意文件上传

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

【深度学习】Stable Diffusion中的Hires. fix是什么?Hires. fix原理

文章目录 **Hires. fix****Extra noise**UpscalersHires. fix原理 Hires. fix https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#hires-fix 提供了一个方便的选项,可以部分地以较低分辨率呈现图像,然后将其放大,最后…

Django系列之Celery异步框架+RabbitMQ使用

在Django项目中,如何集成使用Celery框架来完成一些异步任务以及定时任务呢? 1. 安装 pip install celery # celery框架 pip install django-celery-beat # celery定时任务使用 pip install django-celery-results # celery存储结果使用2. Django集成…

关于对向量检索研究的一些学习资料整理

官方学习资料 主要是的学习资料是, 官方文档 和官方博客。相关文章还是挺多 挺不错的 他们更新也比较及时。有最新的东西 都会更新出来。es scdn官方博客 这里简单列一些,还有一些其他的,大家自己感兴趣去看。 什么是向量数据库 Elasticse…

Windows下通过注册表实现开机自启动(测试)

注册表路径: 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 测试结果: QQ,录屏工具,网易有道词典等都可开机自启动。 而如果应用程序必须要管理员权限才能启动,那么,即使添入…

基于Solr的全文检索系统的实现与应用

文章目录 一、概念1、什么是Solr2、与Lucene的比较区别1)Lucene2)Solr 二、Solr的安装与配置1、Solr的下载2、Solr的文件夹结构3、运行环境4、Solr整合tomcat1)Solr Home与SolrCore2)整合步骤 5、Solr管理后台1)Dashbo…

PairLIE论文阅读笔记

PairLIE论文阅读笔记 论文为2023CVPR的Learning a Simple Low-light Image Enhancer from Paired Low-light Instances.论文链接如下: openaccess.thecvf.com/content/CVPR2023/papers/Fu_Learning_a_Simple_Low-Light_Image_Enhancer_From_Paired_Low-Light_Instan…

Linux升级nginx版本

处于漏洞修复目的服务器所用nginx是1.16.0版本扫出来存在安全隐患,需要我们升级到1.17.7以上。 一般nginx默认在 /usr/local/ 目录,这里我的nginx是自定义的路径安装在 /app/weblogic/nginx 。 1.查看生产环境nginx版本 cd /app/weblogic/nginx/sbin/…

css的复合选择器(有案例)

目录 复合选择器的描述 后代选择器(常用重点) 子选择器 并集选择器(重点常用) 伪类选择器 链接伪类选择器 focus 伪类选择器 知识总结: 案例实现: 复合选择器的描述 在 CSS 中,可以根…

AI跨界学习,不再是梦!

大家好!今天给大家推荐的 GPTs 是【行业知识脉络】,帮助大家快速了解某个领域的脉络,并提供足够的学习资料和建议。 在AI时代,从小白到专家的1万小时定律即将失效,用少于1千小时掌握行业知识树和其核心概念是如何学习的…

Rocket MQ 架构介绍

文章目录 为什么选择Rocket MQ基本概念优点缺点架构图编程模型发送者发送消息固定步骤消费者消费消息固定步骤 为什么选择Rocket MQ Rocket MQ是阿帕奇顶级的开源项目,由阿里开发并开源。它的研发背景是Active MQ与Kafka不能很好的解决当时的业务场景。官网上是这么…

基于JavaWeb+SpringBoot+Vue在线拍卖系统的设计和实现

基于JavaWebSpringBootVue在线拍卖系统系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 …

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue

1 通过Athena查询s3中的数据 此实验使用s3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 1 通过Athena查询s3中的数据1.1 架构图1.2 创建Glue数据库1.3 创建爬网程序1.4 创建表1.4.1 爬网程序创建表1.4.2 手动创建表 1…

机器学习基础介绍

百度百科: 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 …

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中,我们将使用python3作为代码语言。 步骤图例1、入口2、创建(我们选择使用python3.7)3、IAM权限(…

控制台打印如来佛图像

代码 System.out.println(" _ooOoo_ \n"" o8888888o \n"" 88 \".\" 88 …

银河麒麟v10系统SSH远程管理及切换root用户的操作方法

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一…