FastAPI中声明参数为必需的三种方式

前提

有时候我们定义一些参数的时候,需要声明这个参数为必需,请求者必须传递该参数。FatstAPI中声明参数为必需的方式有三种,分别为:不设默认值、  "..." 和 ”Required“ 这三种

方式一:不设默认值

当我们不需要声明额外的校验或元数据时,只需不声明默认值就可以使 q 参数成为必需参数,例如:

q: str

代替:

q: Union[str, None] = None

但是现在我们正在用 Query 声明它,例如:

q: Union[str, None] = Query(default=None, min_length=3)

因此,当你在使用 Query 且需要声明一个值是必需的时,只需不声明默认参数

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: str = Query(min_length=3)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

方式二:"..."

你可以声明一个参数可以接收None值,但它仍然是必需的。这将强制客户端发送一个值,即使该值是None

这种方法可以显式的声明一个值是必需的,即将默认参数的默认值设为 ... :

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: str = Query(default=..., min_length=3)):  # 这里用 ... 来说明q必需传值
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

方式三:"Required"

如果你觉得使用 ... 不舒服,你也可以从 Pydantic 导入并使用 Required

from fastapi import FastAPI, Query
from pydantic import Required  # 需要从pydantic中导入Required

app = FastAPI()


@app.get("/items/")
async def read_items(q: str = Query(default=Required, min_length=3)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

 

 

 

posted @ 2023-01-11 17:18  _yessir  阅读(368)  评论(0编辑  收藏  举报