프레임워크/FastAPI

[FastAPI] FastAPI [7] Body - Fields

:) :) 2023. 3. 27. 21:37

https://fastapi.tiangolo.com/tutorial/body-fields/

 

Body - Fields - FastAPI

Body - Fields The same way you can declare additional validation and metadata in path operation function parameters with Query, Path and Body, you can declare validation and metadata inside of Pydantic models using Pydantic's Field. Import Field First, you

fastapi.tiangolo.com

<FastAPI 공식문서 참조>

 

* 경로연산함수의 Query, Path, Body paramter에서 부가적 검증이나 메타데이터를 선언했던 것처럼

Pydantic models 내부에 Pydantic의 Field를 이용하여 검증과 메타데이터를 선언할 수 있다.

 

1. Import Field

from pydantic import BaseModel, Field

 *BaseModel은 예제를 위해 import

 

2. Declare model attributes

from typing import Annotated

from fastapi import Body, FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str | None = Field(
        default=None, title="The description of the item", max_length=300
    )
    price: float = Field(gt=0, description="The price must be greater than zero")
    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

 

위 코드의 description 부분을 보자.

description: str | None = Field(
        default=None, title="The description of the item", max_length=300
    )

Field는 Query, Path, Body와 같은 방식으로 작용한다(모두 같은 parameter들을 가지고 있다).

 

 

사실, 위 4가지 객체 모두 Param  class의 subclass들이다. Param class는 FieldInfo class의 subclass이다.

그리고 Field는 FieldInfo를 인스턴스로 return한다.

Body도 마찬가지다. 다들 Path operation function의 parameter로써 공통된 구조를 가지고 있다.

 

 

3. Reference

https://fastapi.tiangolo.com/tutorial/body-fields/

 

Body - Fields - FastAPI

Body - Fields The same way you can declare additional validation and metadata in path operation function parameters with Query, Path and Body, you can declare validation and metadata inside of Pydantic models using Pydantic's Field. Import Field First, you

fastapi.tiangolo.com