• FastAPI9多个请求体参数


    可以声明多个请求体参数,例如 item 和 user

     
    from typing import Optional
    
    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    
    class Item(BaseModel):
        name: str
        description: Optional[str] = None
        price: float
        tax: Optional[float] = None
    
    
    class User(BaseModel):
        username: str
        full_name: Optional[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": {
            "name": "Foo",
            "description": "The pretender",
            "price": 42.0,
            "tax": 3.2
        },
        "user": {
            "username": "dave",
            "full_name": "Dave Grohl"
        }
    }
    请注意,即使 item 的声明方式与之前相同,但现在它被期望通过 item 键内嵌在请求体中。

    请求体中的单一值

    与使用 Query 和 Path 为查询参数和路径参数定义额外数据的方式相同,FastAPI 提供了一个同等的 Body

    例如,为了扩展先前的模型,你可能决定除了 item 和 user 之外,还想在同一请求体中具有另一个键 importance

    如果你就按原样声明它,因为它是一个单一值,FastAPI 将假定它是一个查询参数。

    但是你可以使用 Body 指示 FastAPI 将其作为请求体的另一个键进行处理。

    from typing import Optional
    
    from fastapi import Body, FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    
    class Item(BaseModel):
        name: str
        description: Optional[str] = None
        price: float
        tax: Optional[float] = None
    
    
    class User(BaseModel):
        username: str
        full_name: Optional[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

    希望的请求体:

    {
        "item": {
            "name": "Foo",
            "description": "The pretender",
            "price": 42.0,
            "tax": 3.2
        },
        "user": {
            "username": "dave",
            "full_name": "Dave Grohl"
        },
        "importance": 5
    }
  • 相关阅读:
    属性注入(依赖注入)
    Spring之ioc
    Spring初始案例
    ::before和::after伪元素、:visited和:link、transform: scaleX(2);的使用
    给博客博文加上日期分类(set、map)
    Jquery父子选取心得
    先从css3开始拾起
    尝试博客文章一号
    Response.setContentType()
    pom配置详解
  • 原文地址:https://www.cnblogs.com/tarzen213/p/15847364.html
Copyright © 2020-2023  润新知