공식문서를 번역한 내용입니다.
https://fastapi.tiangolo.com/ko/tutorial/body-fields/
Body - Fields - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com
Query, Path 그리고 Body를 사용하여 경로 동작 함수 매개변수에 추가적인 유효성 검사와 메타 데이터를 선언한 것처럼, Pydantic 모델 내부에 Pydantic의 Field를 사용하여 유효성 검사와 메타 데이터를 선언할 수 있다.
Field 임포트
우선 임포트부터 하자.
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
🍳 Field가 다른 것(Query, Path, Body 기타 등등) 처럼 FastAPI가 아닌 Pydantic으로부터 바로 임포트 된다는걸 명심하자
모델 어트리뷰트 선언
모델 어트리뷰트와 함께 Field를 사용할 수 있다.
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
Field는 Query, Path, Body 와 같이 동작하며, 이와 동일한 매개변수와 다른 것들을 갖는다.
🍳 기술적 세부사항 Query,Path 등은 Param이라는 클래스의 오브젝트를 리턴하는데, 이것은 또한 Pydantic의 FieldInfo 클래스의 서브클래스이다. 그리고 Pydantic의 Field는 FieldInfo의 인스턴스를 리턴한다. Body의 경우에도 마찬가지로 FieldInfo타입의 서브클래스를 리턴한다. FastAPI에서 import하는 Query,Path가 특별한 클래스를 리턴한다는 기능이 있다는걸 기억하자.
정보 추가
Field, Query, Body 기타 등등에 추가 정보를 선언할 수 있다. 그리고 이것은 생성된 JSON 스키마에 포함된다.
요약
Pydantic의 Field를 사용하여 모델 어트리뷰트에 추가적인 유효성 검사와 메타 데이터를 선언할 수 있다.
또한 추가적인 JSON 스키마 메타 데이터를 전달하기 위해 추가적인 키워드 인자를 사용할 수 있다.
'코딩 > FastAPI' 카테고리의 다른 글
FastAPI 배우기 - Declare Request Example Data (0) | 2023.07.03 |
---|---|
FastAPI 배우기 - Body - Nested Models (0) | 2023.07.03 |
FastAPI 배우기 - Body - Multiple Parameters (0) | 2023.06.27 |
FastAPI 배우기 - Path Parameters and Numeric Validations (0) | 2023.06.27 |
FastAPI 배우기 - Query Parameters and String Validations (0) | 2023.06.27 |