美文网首页fastapi学习文档fastapi
fastapi教程翻译(八):Body - Schema(模型)

fastapi教程翻译(八):Body - Schema(模型)

作者: warmsirius | 来源:发表于2019-10-11 21:51 被阅读0次

    你同样可以使用PathQueryBody声明额外的验证和元数据在路由操作函数中,你可以使用Pydantic中的Schema方法声明验证和元数据

    一、Import Schema

    1. 导入Schema

    from pydantic import BaseModel, Schema 
    

    注意:Schemapydantic中直接导入,而不是从fastapi中导入。

    二、声明模型类型

    你可以将Schema与模型属性一起使用:

    from fastapi import Body, FastAPI
    from pydantic import BaseModel, Schema
    
    app = FastAPI()
    
    class Item(BaseModel):
        name: str
        description: str = Schema(None, title="The description of the item", max_length=300)
        price: float = Schema(..., gt=0, description="The price must be greater than zero")   
        tax: float = None
    
    @app.put("/items/{item_id}")
    async def update_item(
            *, 
            item_id: int,
            item: Item = Body(..., embed=True)
    ):
        results = {"item_id": item_id, "item": item}
        return results
    

    SchemaQueryPathBody的工作方式相同,具有相同的参数,等等。

    技术细节

    实际上,QueryPath以及接下来将要看到的其他对象是常见的Param的子类,而Param本身就是PydanticSchema的子类。

    但是 Body 却直接是 Schema 的子类. 以及接下来将要看到的其他对象是Body的子类.

    但是记住,当你从fastapi导入Query,Path`,他们其实是同一种类下面的函数方法。点击查看.

    注意:

    类型,默认值和Schema的 每个模型的属性 与 路由操作函数的参数 具有相同的结构,使用Schema而不是PathQueryBody

    三、额外模型

    Schema中, Path, Query, Body 已经接下来将要看到的其他对象, 你可以声明其他额外的参数。

    这些参数将按原样添加到输出JSON Schema。

    如果您了解JSON 模型,并且希望添加除此处讨论的内容以外的其他信息,则可以将其作为额外的关键字参数传递。

    警告⚠️

    注意到额外的参数并不会添加验证,只是一种注释。

    例如,您可以使用该功能将JSON模式示例字段传递给 body请求 JSON模式 :

    from fastapi import Body, FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    class Item(BaseModel):
        name: str
        description: str = None
        price: float
        tax: float = None
    
    @app.put("/items/{item_id}")
    async def update_item(
        *,
        item_id: int,
        item: Item = Body(
            ...,
            example={ "name": "Foo", "description": "A very nice Item", "price": 35.4, "tax": 3.2, },    )
    ):
        results = {"item_id": item_id, "item": item}
        return results
    

    将会在路径 /docs 看到如下:

    四、概括

    • 你可以使用PydanticSchema为你的模型类去声明额外的验证和元数据
    • 你可以使用额外的关键字参数来传递其他JSON Schema元数据。

    相关文章

      网友评论

        本文标题:fastapi教程翻译(八):Body - Schema(模型)

        本文链接:https://www.haomeiwen.com/subject/czhcpctx.html