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

  • 相关阅读:
    火狐优化及遇到的问题
    拷贝工程,名字不改变问题
    Ajax基础实例
    Java中检测字符串的编码格式
    innerHTML和outerHTML有什么区别
    启动Tomcat出现“Bad version number in .class file (unable to load class XXX)”解决
    MyEclipse8.6安装SVN 教程 与遇到的问题
    彻底卸载JDK的-并只依赖配置环境安装JDK(不依赖注册表)-解决Error opening registry key'softwareJavasoftJava Runti问题
    数据库下的分页代码
    WSGI
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12905387.html
Copyright © 2011-2022 走看看