Pydantic

2024. 4. 2. 18:29Back-end/FastAPI

[점프 투 FastAPI] 2-04-3 Pydantic으로 입출력 스펙을 정의한다.

Pydantic에 대해 왜 사용하고 어떤 기능을 하는지 자세히 알아보자.

 

Pydantic

  • Request, Response 모델 정의.
  • type annotation으로 데이터 검증과 설정 관리.
    • 입출력 항목의 개수와 타입 설정.
    • 입출력 항목의 필수값 체크.
    • 유저 친화적 에러 제공.
  • parsing 라이브러리로, 입력값을 정의된 타입으로 변환하여 모델의 타입과 제약 조건 보장.
  • JSON이나 dict 변환 가능.

 

BaseModel

아래와 같이 타입을 정의하고 설정한 타입과 일치하지 않으면 에러를 발생시킨다.

UUID(Universally Unique IDentifier) : 고유성 보장, 주로 db의 Primary Key로 사용.

import datetime
from pydantic import BaseModel
from uuid import UUID

class Question(BaseModel):
    id: UUID
    subject: str
    content: str
    create_date: datetime.datetime

 

Field

https://docs.pydantic.dev/latest/concepts/fields/

 

Fields - Pydantic

Fields API Documentation pydantic.fields.Field The Field function is used to customize and add metadata to fields of models. Default values The default parameter is used to define a default value for a field. from pydantic import BaseModel, Field class Use

docs.pydantic.dev

  • 별칭 사용
from pydantic import BaseModel, Field

class User(BaseModel):
    name: str = Field(..., alias='username')

user = User(username='johndoe')  
print(user)
#> name='johndoe'
print(user.model_dump(by_alias=True))  
#> {'username': 'johndoe'}
  • 숫자 크기 제약(gt:초과, lt:미만, ge:이상, le:이하, multiple_of:배수, allow_inf_nan:'-inf', 'nan'값 허용)
  • 문자열 제약(min_length:최소 길이, max_length:최대 길이, pattern:정규식)
  • Decimal 제약(max_digits:전체 최대 자릿수, decimal_places:최대 소수 자릿수)
  • 제약에 위반되는 값을 입력하면 에러 발생.
  • 기타(데이터 클래스, 기본값 검증, 판별자 등) 관련 내용들이 있지만 현 단계에서는 아직 필요하지 않은 내용인 듯하여 나중에 필요해지면 찾아보자.

'Back-end > FastAPI' 카테고리의 다른 글

의존성 주입_Depends  (1) 2024.03.30