• FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据


    前言

    • 前面讲了 Query、Path、Body,均可以对某个字段进行额外的校验和添加元数据
    • 这一篇来讲 Fields,它针对 Pydantic Model 内部字段进行额外的校验和添加元数据

    Fields

    • 它是 Pydantic 提供的方法,并不是 FastAPi 提供的哦
    • 该方法返回了一个实例对象,是 Pydantic 中 FieldInfo 类的实例对象

    重点

    FastAPI 提供的 Query、Path等其他公共 Param 类和 Body 类,都是 Pydantic 的 FieldInfo 类的子类

    Query、Path 继承 Param,Param 继承 FieldInfo

     

    Body 直接继承 FieldInfo

    简单的栗子

    from typing import Optional
    
    import uvicorn
    from fastapi import FastAPI, Body
    from pydantic import Field, BaseModel
    
    app = FastAPI()
    
    
    class Item(BaseModel):
        name: str
        description: Optional[str] = Field(
            default=None,
            title="标题",
            description="描述",
            max_length=5
        )
        price: float = Field(..., gt=0, description="需要大于0")
        tax: Optional[float] = None
    
    
    @app.post("/items/{item_id}")
    async def update_item(item_id: int, item: Item = Body(..., embed=True)):
        results = {"item_id": item_id, "item": item}
        return results
    
    
    if __name__ == "__main__":
        uvicorn.run(app="11_fields:app", host="127.0.0.1", port=8080, reload=True, debug=True)

    正确传参的请求结果 

    校验失败的请求结果

    查看 Swagger API 文档 

    JSON Schema 对加了 Fields 的字段会有详细的描述

  • 相关阅读:
    java多线程学习-同步之线程通信
    java多线程学习-同步(synchronized)
    java多线程学习-开篇
    面向对象-多线程-异常机制-查漏补缺
    Sprin2.5+Hibernate3.3+Struts2.0.11集成
    Strut1.3+Sprin2.5+Hibernate3.3集成
    Sprin2.5+Hibernate3.3集成
    Spring学习笔记
    Hibernate学习笔记
    Sping
  • 原文地址:https://www.cnblogs.com/poloyy/p/15312715.html
Copyright © 2020-2023  润新知