FastAPI(8)- 请求体 Request Body (下)

简介: FastAPI(8)- 请求体 Request Body (下)

校验失败的请求结果

image.png


友好的错误提示啊~

 

使用 Pydantic 模型(建议使用)


实际栗子

from fastapi import FastAPI
from typing import Optional
from pydantic import BaseModel
app = FastAPI()
# 自定义一个 Pydantic 模型
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
@app.post("/items/")
# item 参数的类型指定为 Item 模型
async def create_item(item: Item): 
    return item


参数指定为 Pydantic 模型后,FastAPI 做了这几件事

  1. 将请求体识别为 JSON 字符串
  2. 将字段值转换相应的类型(若有需要)
  3. 验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息
  4. item 会接收到完整的请求体数据,拥有所有属性及其类型,IDE 也会给予对应的智能提示
  5. 给 Pydantic 模型自动的生成 JSON Schema,这些 Schema 会成为生成 OpenAPI Schema 的一部分,并显示在接口文档上

 

正确传参的请求结果


image.png

正常传参,所有属性按指定的类型进行传数据

 

字段值类型自动转换

  • name: str  传了 bool 类型的数据
  • description: str  传了 float 类型的数据
  • price: float   传了 int 类型的数据
  • tax: float  传了 bool 类型的数据


image.png

image.png


FastAPi 会将传进来的值自动转换为指定类型的值

  • 将 true 转成 str 类型,即 "True"
  • 将 12.22 转成 str 类型,即 "12.22"
  • 将 12 转成 float 类型,即 12.0
  • 将 true 转成 float 类型,即 1.0

如果转换失败,则会报 type_error 错误(如下图)

 

验证数据失败的请求结果

image.png

image.png


查看 Swagger API 文档

Schema 部分

image.png

model 的 JSON Schema 会成为 Swagger APi 文档的一部分

 

示例值部分

image.png

IDE 智能提示

因为知道 name 属性的类型是 str,所以 IDE 会智能提示 str 内置的方法

image.png


Request body + path + query parameters 综合栗子


  • 可以同时声明请求体、路径参数、查询参数
  • FastAPI 可以识别出它们中的每一个,并从正确的位置获取到数据

 

实际代码

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(
        # 路径参数
        item_id: int,
        # 请求体,模型类型
        item: Item,
        # 查询参数
        name: Optional[str] = None):
    result = {"item_id": item_id, **item.dict()}
    print(result)
    if name:
        # 如果查询参数 name 不为空,则替换掉 item 参数里面的 name 属性值
        result.update({"name": name})
    return result


FastAPI 识别参数的逻辑

  • 如果参数也在路径中声明,它将解释为路径参数【item_id】
  • 如果参数是单数类型(如int、float、str、boo l等),它将被解释为查询参数【name】
  • 如果参数被声明为 Pydantic 模型的类型,它将被解析为请求体【item】

 

正确传参的请求结果

image.png

Pycharm Console 输出结果

打印 result 的值

{'item_id': 1234, 'name': '小菠萝', 'description': '描述,非必填', 'price': 12.22, 'tax': 0.0}

 

查看 Swagger API 文档

image.png

相关文章
|
6月前
|
JSON API 数据安全/隐私保护
如何使用Fastapi上传文件?先从请求体数据讲起
如何使用Fastapi上传文件?先从请求体数据讲起
195 2
FastAPI(54)- 详解 Request 请求对象(上)
FastAPI(54)- 详解 Request 请求对象(上)
615 0
|
6月前
|
IDE 测试技术 开发工具
FastAPI 并发请求解析:提高性能的重要特性
在当今的数字化世界中,网络用户对于高速响应和持续连接的诉求日益显著。这促使了基于 Python 构建的 FastAPI 框架受到广泛关注,它不仅现代化且效率极高,而且简化了并行请求的处理。本篇文章旨在探讨 FastAPI 如何处理这类请求,并对应用实例进行实际编码展示。
|
存储 SQL 前端开发
FastAPI第三天---文件请求
FastAPI第三天---文件请求
208 0
FastAPI第三天---文件请求
|
前端开发 中间件 测试技术
FastApi的请求拦截
FastApi的请求拦截
873 0
|
XML JSON JavaScript
FastApi-06-请求体-3
FastApi-06-请求体-3
153 0
|
存储 Python
FastAPI(54)- 详解 Request 请求对象(下)
FastAPI(54)- 详解 Request 请求对象(下)
556 0
FastAPI(54)- 详解 Request 请求对象(下)
FastAPI(15)- 声明请求示例数据(下)
FastAPI(15)- 声明请求示例数据(下)
215 0
FastAPI(15)- 声明请求示例数据(下)