ICode9

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

FastAPI 请求体

2022-04-28 15:00:06  阅读:178  来源: 互联网

标签:None 请求 FastAPI item str import Optional


FastAPI使用请求体从客户端向API发送数据,请求体是客户端发送给API的数据,响应体是API发送给客户端的数据。API基本上肯定要发送响应体,但是客户端不一定发送请求体。使用pydantic模型声明请求体。

发送数据使用post(最常用)、put、delete、patch等操作。规范中没有定义使用get发送请求体的操作,但是不管怎样,FastAPI也支持这种方式,只不过仅用于非常复杂或极端的用例。

导入Pydantic的baseModel

from pydantic import BaseModel

创建数据模型

把数据模型声明为继承baseModel的类,使用python标准类型声明所有属性:

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

 

声明请求体参数

使用与声明路径和查询参数相同的方式声明请求体,把请求体添加至路径操作。

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    return item

上面代码中请求体参数的类型为Item模型。

与声明查询参数一样,包含默认值的模型属性是可选的,否则就是必选的,默认值为None的模型属性也是可选的。

使用模型

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    if item.tax:
        price_with_tax = item.price + item.tax
        item_dict.update({"price_with_tax": price_with_tax})
    return item_dict

在路径操作函数内部直接访问模型对象的属性。

 

请求体+路径参数

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item):
    return {"item_id": item_id, **item.dict()}

FastAPI支持同时声明路径参数和请求体,能识别与路径参数匹配的函数参数,还能识别从请求体中获取的类型为Pydantic模型的函数参数。

 

请求体+路径参数+查询参数

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: Optional[str] = None):
    result = {"item_id": item_id, **item.dict()}
    if q:
        result.update({"q": q})
    return result

FastAPI支持同时声明的请求体、路径参数和插叙参数,能够正确识别这三种参数,并从正确的位置获取数据。

函数参数按如下规则进行识别:

  • 路径中声明了相同参数的参数,是指路径参数
  • 类型时(int、float、str、bool等)单类型的参数,是查询参数
  • 类型时Pydantic模型的参数,是请求体

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

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

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

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

ICode9版权所有