일반적으로 요청 본문을 처리하는 방법은 pydantic에 BaseModel을 이용하여 처리한다.
요청 받는 부분을 class화 하여 함수의 매개변수로 넘겨주게 된다면 fastapi 에서는 이를 body parameters 라고 판단하고 처리한다.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
class User(BaseModel):
username: str
full_name: str | None = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item, user: User):
results = {"item_id": item_id, "item": item, "user": user}
return results
하지만 아래와 같이 json 형식으로 왔다고 가정한다.
{
"item": {
"name": "Foo",
"description": "The pretender",
"price": 42.0,
"tax": 3.2
},
"user": {
"username": "dave",
"full_name": "Dave Grohl"
},
"importance": 5
}
그럼 함수 측에서는 importance 을 처리하기 위해서 아래와 같이 코드를 작성 할 것이지만 이는 쿼리 매개 변수로 처리 되기 때문에 body parameters 라고 판단되어 처리 될 수가 없다.
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item, user: User, importance: int):
results = {"item_id": item_id, "item": item, "user": user}
return results
따라서 해당 방법을 해결하기 위해서, Annotated와 Body() 을 이용하여 처리 한다.
@app.put("/items/{item_id}")
async def update_item(
item_id: int, item: Item, user: User, importance: Annotated[int, Body()]
):
results = {"item_id": item_id, "item": item, "user": user, "importance": importance}
return results
만약 json에서 단일 매개변수만 선언되어 이를 처리하여야 한다면 다음과 같이 처리가 가능하다.
{
"name": "Foo",
"description": "The pretender",
"price": 42.0,
"tax": 3.2
}
이를 처리하기 위해서 Body()에서 embed 값을 True로 설정한다
from typing import Annotated
from fastapi import Body, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Annotated[Item, Body(embed=True)]):
results = {"item_id": item_id, "item": item}
return results
'FrameWork > Fastapi' 카테고리의 다른 글
[Fastapi] 쿠키 매개변수 (0) | 2023.05.12 |
---|---|
[Fastapi] Body Fields을 통한 유효성 검증, 중첩 모델 (0) | 2023.05.12 |
[Fastapi] 경로 매개 변수에서의 유효성 검증 (1) | 2023.05.12 |
[Fastapi] 유효성 검사, 필수 매개변수, 쿼리 매개변수 목록/다중 값 처리 (0) | 2023.05.12 |
[Fastapi] 요청 본문 (0) | 2023.05.12 |