fastapi教程-进阶(二)

参考内容

Request Body

这里我们来介绍一下POST请求时,fastapi是如何接收请求体的

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

接下来,我们来拆解一下步骤:

1. 导入BaseModel

from pydantic import BaseModel

2. 声明请求体结构,这个结构体是一个继承了BaseModel的类

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

如果指定了默认值,那么他就是非必填的;否则,这个参数就是必填的。
这里用None来表示参数为非必填,在传递参数时,可以不写这个参数
根据上面的结构体,我们可以这样传递参数:

{
    
    
    "name": "Foo",
    "description": "An optional description",
    "price": 45.2,
    "tax": 3.5
}

或者

{
    
    
    "name": "Foo",
    "price": 45.2
}

3. 将声明好的结构体添加到方法中

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

这时,我们的接口已经初步完成,当有请求进来是,fastapi会这样做:

  1. 读取json格式的请求体
  2. 将参数转换为对应的类型
  3. 验证数据是否合法,如果不符合定义的类型会返回错误的字段及错误的原因

运行服务,打开http://127.0.0.1:8000/docs,可以看到:
在这里插入图片描述

在这里插入图片描述

Request body + path + query parameters

fastapi教程——进阶(一)我们已经学过了如何声明path和query参数,接下来我们把它们整理到一起:

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

这个接口的方法将会这样获取参数:

  1. 如果在路径中声明了该参数,那么他就会被传递给item_id
  2. 如果在查询参数中指定了参数,那么他就会被传递给q
  3. 如果在请求体中指定了参数,那么他就会被传递给item

上述栗子均放到git上啦,地址:戳这里

猜你喜欢

转载自blog.csdn.net/weixin_40156487/article/details/108279120