[FastAPI] Pydantic 모델 | study book
Pydantic
pydantic은 파이썬의 타입 어노테이션을 이용해서 요청 바디의 검증을 할 수 있다. 요청 데이터를 검증하고 악의적인 공격을 줄여주기 때문이다.
데이터 모델링
Pydantic은 BaseModel 클래스를 기반으로 데이터 모델을 정의한다. 모델 클래스 내에 속성을 정의하고, 각 속성에 타입 힌트를 부여하면 Pydantic이 자동으로 유효성을 검사하고 변환한다.
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
signup_ts: Optional[datetime] = None
friends: List[int]
유효성 검사 및 타입 변환
Pydantic은 지정된 타입에 따라 입력 데이터를 자동으로 변환하거나, 타입이 맞지 않는 경우 오류를 발생시킨다. 예를 들어, int로 정의된 필드에 문자열 "123"이 입력되면, Pydantic은 이를 int로 변환한다.
user = User(id='123', name='John Doe', friends=['1', '2', '3'])
print(user.id) # 123 (str이 int로 변환됨)
print(user.friends) # [1, 2, 3] (각 요소가 int로 변환됨)
데이터 유효성 검사
데이터의 형식뿐만 아니라 값의 유효성도 검사할 수 있다. 예를 들어, 문자열 길이, 정수 범위, 리스트의 요소 개수 등 다양한 조건을 정의할 수 있다.
from pydantic import BaseModel, constr, conint
class Product(BaseModel):
name: constr(min_length=3)
price: conint(ge=0)
타입 어노테이션의 강력함
Pydantic은 Python의 타입 힌팅을 적극 활용하여 복잡한 데이터 구조도 쉽게 다룰 수 있게 해준다. 중첩된 데이터 구조나 다양한 데이터 타입을 포함한 모델을 정의할 수 있다.
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
address: Address
메소드 요청 - POST
대표적으로 GET, POST, UPDATE, DELETE 요청 등이 있지만 POST 같은 경우 body로 요청하기 때문에 pydantic 모델로 요청을 보내게 되면 json 형태로 반환해야 하기 때문에 http 요청 헤더에서 Content-Tpye을 json으로 설정해주어야 한다.
curl -X POST \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '{"key1": "value1", "key2": "value2"}' \
https://api.example.com/endpoint
참고 자료
https://product.kyobobook.co.kr/detail/S000201188332
FastAPI를 사용한 파이썬 웹 개발 | 압둘라지즈 압둘라지즈 아데시나 - 교보문고
FastAPI를 사용한 파이썬 웹 개발 | FastAPI의 핵심 기능과 5가지 기술 스택(몽고DB, 도커, pydantic, SQLModel, pytest)으로 이벤트 플래너 애플리케이션을 처음부터 끝까지 완성해본다!이 책의 강점은 ‘이
product.kyobobook.co.kr