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就只是个请求参数,所以务必注意下。

  • 相关阅读:
    C字符串和C++字符串
    Linux的用户态和内核态
    知乎问答:如何理解“In UNIX, everything is a file”?
    科普:并行计算、分布式计算、集群计算和云计算
    个人使用VIM的一些总结
    C语言回调函数学习
    Python的函数参数传递:传值?引用?
    ECMAScript 函数函数概述
    ECMAScript 函数arguments 对象
    ECMAScript 语句with 语句
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12905387.html
Copyright © 2011-2022 走看看