4. fastApi请求体详解

2023-05-16

简单介绍网络请求

网络请求是指客户端(例如浏览器、移动应用程序等)向服务器发送请求,以获取特定资源或执行特定操作的过程。HTTP请求是一种常见的网络请求协议,它通过互联网连接客户端和服务器,以实现数据交互和资源访问。
HTTP请求由两部分组成:请求头(Request Header)和请求体(Request Body)。
请求头包含了请求的元数据信息,例如请求方式(GET、POST等)、请求URL、Accept(可接受的响应类型)、User-Agent(客户端的浏览器或设备信息)、Authorization(身份验证信息)等。请求头以键值对的形式组织,每个键值对之间使用换行符(\r\n)分隔。
请求体通常用于传输数据,例如表单数据、JSON数据等。请求体也以键值对的形式组织,每个键值对之间使用“&”符号分隔。
HTTP请求可以使用不同的方法,其中最常见的是GET和POST方法。
GET请求用于向服务器请求指定资源,通常是获取信息,不会对服务器数据产生任何影响。GET请求将请求参数附加在URL的末尾,形成类似“https://www.example.com/?name=value”的形式。
POST请求用于向服务器提交数据,例如表单数据、JSON数据等,通常会对服务器数据产生影响。POST请求将请求参数放在请求体中进行传输,因此相比GET请求更适用于传输大量数据。
总之,HTTP请求是客户端向服务器请求资源或执行操作的过程,请求头和请求体是请求的两个组成部分,GET和POST是HTTP请求最常见的两种请求方法

fastApi处理POST请求

问题
为/chapt3/request_body/city路由写一个接口,使用post方法传递一个json到后端,同时后端将数据打印后响应回前端。
要求,继承pydantic的基础类BaseModel, 和基础方法Field,json字段如下:

{
  "city_name": "Shanghai",# 字段默认为上海,为必填参数
  "country": "China",# 默认为中国
  "country_code": "CN",# 默认为中国
  "resident_population": 20000000 # 默认为2000w,同时限制最小值为8000
}

实现方法:定义CityInfo类,使用Field方法【为fastApi内指定方法】将类变量映射为json字段,同时初始化。试图函数接受的参数类型为CityInfo类。
实现代码:

from pydantic import Field
# 定义字段对应类
class CityInfo(BaseModel):
    city_name: str = Field(default="Shanghai", description="城市名称")
    country: str = Field(default="China", description="国家")
    country_code: str = Field(default="CN", description="国家代码")
    resident_population: int = Field(default=20000000, description="城市常住人口", gt=8000)

@app03.post("/request_body/city")
def city_info(city: CityInfo):
    print(city.city_name, city.country)  # 当在IDE中输入city.的时候,属性会自动弹出
    msg = {
        'msg': '接口测试成功',
        'uri': "/request_body/city",
        'data': city.dict()
    }
    return msg

实现结果:swaggle接口测试页面展示
在这里插入图片描述

实现请求体内含有多个格式化后的数据

@app03.put("/request_body/city/{name}")
def mix_city_info(
    name: str,
    city01: CityInfo,
    city02: CityInfo,  # Body可以是多个的
    confirmed: int = Query(ge=0, description="确诊数", default=0),
    death: int = Query(ge=0, description="死亡数", default=0),
):
    if name == "Shanghai":
        return {"Shanghai": {"confirmed": confirmed, "death": death}}
    return city01.dict(), city02.dict()

解释

  1. {name}为路径参数,必须填
  2. city01 city02为请求体内两条数据,数据格式为定义过的格式
  3. confirmed death 为非必填的查询参数,通过Query方法给定了默认值,同时添加了描述
    实现效果:
    在这里插入图片描述

使用Body方法校验请求体格式

@app03.put("/request_body/multiple/parameters")
def body_multiple_parameters(
    city: CityInfo = Body(..., embed=True),  # 当只有一个Body参数的时候,embed=True表示请求体参数嵌套。多个Body参数默认就是嵌套的
    confirmed: int = Query(ge=0, description="确诊数", default=0),
    death: int = Query(ge=0, description="死亡数", default=0),
):
    print(f"{city.city_name} 确诊数:{confirmed} 死亡数:{death}")
    return city.dict()

请求体嵌套格式实现

class Data(BaseModel):
    city: List[CityInfo] = None  # 这里就是定义数据格式嵌套的请求体
    date: date  # 额外的数据类型,还有uuid datetime bytes frozenset等,参考:https://fastapi.tiangolo.com/tutorial/extra-data-types/
    confirmed: int = Field(ge=0, description="确诊数", default=0)
    deaths: int = Field(ge=0, description="死亡数", default=0)
    recovered: int = Field(ge=0, description="痊愈数", default=0)


@app03.put("/request_body/nested")
def nested_models(data: Data):
    return data

解释

  1. city为数组嵌套城市类型数据,其字段展示为
    “city”: [
    {
    “city_name”: “Shanghai”,
    “country”: “China”,
    “country_code”: “CN”,
    “resident_population”: 20000000
    }
    ]
    实现结果:
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4. fastApi请求体详解 的相关文章

随机推荐

  • 运行Maven Web项目出现 org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException错误

    异常问题描述 xff1a 初学Maven xff0c 新建了一个基于Web骨架的Web项目 xff0c jar 包也导好了 xff0c 作用域也设置正确了 xff0c Tomcat也正常运行了 xff0c 可是就是说编译错误 问题原因 由于
  • 解决mingw-w64外网下载太慢问题,离线包安装配置过程讲解

    常规安装程序下载地址 xff1a http www mingw w64 org doku php 但用安装程序直接安装mingw w64 xff0c 由于国际网络链路问题 xff0c 很难安装成功 xff0c 于是做了打包了一个离线包 xf
  • HTTP安全-nonce和timestamp在Http安全协议中的作用

    http www byywee com page M0 S591 591082 html 写道 前段时间给客户网站做新浪微博账号登录功能 xff0c 对 OAuth协议以及相关的一些安全协议做了一些研究 xff0c 顺便就记录一下学习心得吧
  • NVIDIA TensorRT使用记录

    1 准备工作 1 Pipeline train 在Host PC的GPU上训练test deployment 在TX1 TX2上部署使用 2 主机部署步骤 Running JetPack on the Host JetPack L4T 3
  • 用C语言实现串口通讯程序

    1 首先安装虚拟串口vspd软件 xff0c 用于创建虚拟串口进行互联调试 2 打开vspd软件 xff0c 选择COM1和COM4 xff0c 点击Add pair xff0c 把COM1和COM4互联 3 打开虚拟串口助手 xff0c
  • A2M7雷达在虚拟机的SLAM建图

    准备 Ubuntu18 04 雷达A2M7 一 前期准备 安装 建立工作空间并编译 mkdir p turtlebot ws src cd turtlebot ws src git clone https github com ncnynl
  • linux cmake分别指定编译/运行时动态库链接路径

    1 背景 在树莓派上开发执行程序 xff0c 需要用到opencv curl jsoncpp等库函数支持 xff0c apt get安装好后 xff0c 编译执行正常 但是执行程序挪到别的板子上 xff0c 都要apt get安装这些库 x
  • C语言函数库之字符串连接函数(string.h)

    1 字符串连接函数strcat 函数定义 xff1a char strcat char str1 const char str2 函数功能 xff1a 把str2 包括 39 0 39 拷贝到str1的尾部 连接 xff0c 并返回str1
  • foc学习笔记3——电流环

    foc学习笔记3 电流环 电流环的作用 前文不断强调 xff0c 进行磁场定向控制需要控制的是电流而非电压 xff0c 只是因为我们没有办法直接去控制电流才暂时退而求其次地去控制电压 虽然电压控制的效果也还不错 xff0c 但由于电机不是单
  • ESP32之蓝牙配网blufi

    概览 BluFi 是一款基于蓝牙通道的 Wi Fi 网络配置功能 xff0c 适用于 ESP32 它通过安全协议将 Wi Fi 配置和证书传输到 ESP32 xff0c 然后 ESP32 可基于这些信息连接到 AP 或建立 SoftAP B
  • 机器人学习之项目- Project2 :Where Am I?

    1 项目概述 欢迎来到 Where Am I 我在哪里 定位项目 在这个项目中 xff0c 将学习如何利用ROS AMCL包在Gazebo模拟环境的地图中准确地定位移动机器人 在完成本项目的过程中 xff0c 涉及机器人软件工程的几个方面
  • 将不同类对象指针存放QVector中

    需求 xff1a 将一系列操作步骤放在链表中按需调用 我将每个操作步骤用一个类实现 xff0c 将各类继承于一个基类 xff0c 再将指向各子类的基类指针放在QVector Vector xff0c 即可通过C 43 43 的多态实现调用各
  • 体感摄像头 realsense 系列硬件资料

    一 体感摄像头 Intel的体感摄像机是具有深度图像采集能力的摄像机 xff0c 目前已经出到了400系列 与kinect 2 xff0c ZED xff0c leap motion比较 xff0c 属于比较中庸 手势识别方面不如leap
  • C语言进度条的实现

    C语言进度条的实现 buff N xff1a 进度条状态字符串 xff0c N大小决定进度条长度 xff08 自行调整 xff09 xff0c 使用前先将所有字符初始化置零 xff0c 我这里使用的是memset函数 xff1b label
  • numpy下的随机数

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net m0 38061927 article details 75335069 在使用Python进行数据处理时 xff0c 往往
  • 宏函数 可变参数 C/C++

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 排查ingress 404报错的方法--附:在容器中使用tcpdump抓包

    出现这个问题 xff0c 一般是由于路由不通导致的 xff0c 需要进行抓包排查 首先要解决的问题是 xff0c 如何在 ingress controller 容器中安装抓包工具 1 由于 ingress controller 的mando
  • fastApi介绍与重要版本更新细节

    fastApi介绍 FastAPI 是用于使用 Python 构建 API 的现代 Web 框架 它建立在 Starlette 框架之上 xff0c Starlette 框架是一个轻量级且可扩展的 ASGI xff08 异步服务器网关接口
  • 3. fastApi查询参数详解

    当声明的参数不是路径参数时 xff0c 路径操作函数会把该参数自动解释为查询参数 如下 路径操作函数将参数skip limit解释为查询参数 query parameter span class token decorator annota
  • 4. fastApi请求体详解

    简单介绍网络请求 网络请求是指客户端 xff08 例如浏览器 移动应用程序等 xff09 向服务器发送请求 xff0c 以获取特定资源或执行特定操作的过程 HTTP请求是一种常见的网络请求协议 xff0c 它通过互联网连接客户端和服务器 x