Pydantic model#
from fastapi import FastAPI
from fastapi.testclient import TestClient
from pydantic import BaseModel
Default arguments#
All defined arguments you’ve specified for the pydantic
model will be interpreted by python as default values in case parameter doesn’t passed.
The following cell defines an endpoint that uses BaseModel
where param1
has a default value and param2
doesn’t have a default value.
class Item(BaseModel):
param1: int = 33
param2: str
app = FastAPI()
@app.post("/")
def read_json(item: Item):
return f"""I have got:
param1={item.param1};
param2={item.param2}."""
test_client = TestClient(app=app)
Here api is called with param1
doesn’t specified.
data = {"param2": "test line"}
print(
test_client.post(url="/", json=data)
.content
.decode("utf-8")
.replace("\\n", "\n")
)
"I have got:
param1=33;
param2=test line."
Result shows that the default value has been replaced.
But if you don’t pass a parameter without a default value, you will get a 422 error.
ans = test_client.post(url="/", json={})
print(ans)
print(ans.content.decode())
<Response [422 Unprocessable Entity]>
{"detail":[{"type":"missing","loc":["body","param2"],"msg":"Field required","input":{}}]}
test_client.close()