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