FastAPI:如何知道参数是否真的为空?



我有一个资源,并希望有一个post API端点来修改它。我的问题是,如果我设置所有属性是可选的[…]我怎么知道我是否想要删除一个属性还是将其设置为null?如果我在请求中设置它为null:我得到NoneType。但如果我不在请求中设置它,我也会得到NoneType。这两种情况之间是否存在不同的解决方案?

下面是一个示例程序:

from typing import Optional
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel

class TestEntity(BaseModel):
first: Optional[str]
second: Optional[str]
third: Optional[str]

app = FastAPI()

@app.post("/test")
def test(entity: TestEntity):
return entity

if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=5000)

我想把第一个属性设置为null,其他属性不做任何操作,我做:

{
"first":null
}

通过POST请求。作为响应,我得到:

{
"first": null,
"second": null,
"third": null
}

正如你所看到的,你无法知道哪些属性被设置为null,哪些属性应该保持不变。

您可以在这里找到答案:Pydantic:检测字段值是否缺失或给定为null

@app.post("/test")
def test(entity: TestEntity):
return entity.dict(exclude_unset=True)

最新更新