FrameWork/FastAPI

Pydantic & 스키마

mansoorrr 2024. 5. 26. 17:07

[Pydantic]

  • FastAPI의 입출력을 정의, 데이터를 검증
  • 입출력 항목의 갯수와 타입 설정
  • 입출력 항목의 필수값 체크
  • 입출력 항목의 데이터 검증
  • Pydantic을 사용하기 위해 출력 스키마를 생성해야 함

 

[스키마]

  • 출력 스키마는 해당 도메인에서 schema.py로 관리
  • 데이터의 구조와 명세(출력항목 개수, 제약조건 등)

 

[사용방법: 스키마 만들기 > router에 적용 > api동작 확인]

 

1. 스키마 만들기

#---------- domain/question/question_schema.py
from pydantic import BaseModel
from datetime import datetime


class Question(BaseModel): #베이스모델 상속
	#Question모델의 field들 중 보이고 싶은 field만 작성해 주기
	id: int
    subject: str
    content: str
    create_date: datetime

 

2. router에 적용

#---------- domain/question/question_router.py

from domain.question import question_schema

#response_model로 해당 api에서 출력되는 데이터는 question_schema.Question의 모양을 따르는 리스트 형태
@router.get('/list', response_model=list[question_schema.Question])
def question_list(db: Session=Depends(get_db)):
	question_list = db.query(Question).order_by(Question.created_date.desc())
    return question_list

 

좌: 정의한 스키마대로 리스트 출력 / 우: 4개 필드를 모두 출력하겠다고 스키마에 작성한 상태

 

좌: 정의한 스키마대로 리스트 출력 / 우: 3개 필드만 출력하겠다고 스키마에 작성한 상태