zoukankan      html  css  js  c++  java
  • FastAPI 基础学习(七) Request Body(II)

    作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

    二、多个Request Body

    我们可以同时声明多个Request Body参数。

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    
    class Item(BaseModel):
        name: str
        description: str = None
        price: float
        tax: float = None
    
    
    class User(BaseModel):
        username: str
        full_name: str = None
    
    
    @app.put("/items/{item_id}")
    async def update_item(*, item_id: int, item: Item, user: User):
        results = {"item_id": item_id, "item": item, "user": user}
        return results

    这两个参数(item、user)类型都是Pydantic数据模型。

    我们务必要注意,这里参数的名称就是body里的键值,body内容格式如下示例:

    {
        "item": {
            "name": "Foo",
            "description": "The pretender",
            "price": 42.0,
            "tax": 3.2
        },
        "user": {
            "username": "dave",
            "full_name": "Dave Grohl"
        }
    }

    三、嵌入单个Request Body

    如果Request Body内容格式如下:

    {
        "item": {
            "name": "Foo",
            "description": "The pretender",
            "price": 42.0,
            "tax": 3.2
        }
    }

    这里"item"是Request Body内部数据内容的键值,那么我们就需要利用Body方法的embed参数,才能正确解析出Request Body内容。

    item: Item = Body(..., embed=True)

    具体示例如下:

    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(..., embed=True)):
        results = {"item_id": item_id, "item": item}
        return results

    四、单个数值

    对于Request Body里的单个数值,FastAPI提供了便利的操作方法Body

    from fastapi import Body, FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    
    class Item(BaseModel):
        name: str
        description: str = None
        price: float
        tax: float = None
    
    
    class User(BaseModel):
        username: str
        full_name: str = None
    
    
    @app.put("/items/{item_id}")
    async def update_item(
        *, item_id: int, item: Item, user: User, importance: int = Body(...)
    ):
        results = {"item_id": item_id, "item": item, "user": user, "importance": importance}
        return results

    Request Body数据格式示例如下:

    {
        "item": {
            "name": "Foo",
            "description": "The pretender",
            "price": 42.0,
            "tax": 3.2
        },
        "user": {
            "username": "dave",
            "full_name": "Dave Grohl"
        },
        "importance": 5
    }

    注意,这里如果没有Body方法的话,参数importance就只是个请求参数,所以务必注意下。

  • 相关阅读:
    写给理工科人看的乐理(一)声学基础
    魔方最少记忆还原法
    甲乙两人互猜数字(鬼谷子问题)的逻辑推理与算法建模
    模板元编程实现素数判定
    UVa OJ 194
    UVa OJ 175
    UVa OJ 197
    UVa OJ 180
    UVa OJ 140
    判断input或者div.span等标签是否存在
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12905387.html
Copyright © 2011-2022 走看看