ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FastAPI 请求体

2022-05-05 12:32:19  阅读:206  来源: 互联网

标签:None 请求 FastAPI results item str Optional id


多个参数

混用Path、Query和请求体参数

from fastapi import FastAPI, Path
from typing import Optional
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
    
@app.put("/items/{item_id}")
async def update_item(
            *,
            item_id: int = Path(..., title = "The ID of the item to get", ge=0, le=1000),
            q: Optional[str] = None,
            item: Optional[Item] = None
            ):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    if item:
        results.update({"item": item})
    return results

多个请求体参数

上例中,路径操作预期JSON请求体中的Item包含如下属性:

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

但也可以声明多个请求体参数,例如itemuser

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

本例中,FastAPI能够识别函数中有多个请求体参数,因此,它把参数名作为请求体的键,并返回如下请求体:

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

fastapi会自动转换请求中的数据,因此itemuser参数会接收指定的内容。

标签:None,请求,FastAPI,results,item,str,Optional,id
来源: https://www.cnblogs.com/litianming/p/16224287.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有