■ @field_validator 데코레이터를 사용해 커스텀 검증 논리를 추가하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
from pydantic import BaseModel from pydantic import Field from pydantic import field_validator class Joke(BaseModel): setup : str = Field(description = "question to set up a joke" ) punchline : str = Field(description = "answer to resolve the joke") # Pydantic을 사용하면 사용자 정의 검증 논리를 쉽게 추가할 수 있습니다. @field_validator("setup") def valiedateSetup(cls, field): if field[-1] != "?": raise ValueError("Badly formed question!") return field |
■ Field 함수를 사용해 모델 클래스에서 필수/선택 항목을 설정하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
from typing import Optional from pydantic import BaseModel, Field class Student(BaseModel): id : str = Field(... , description = "ID" ) # 필수 항목 name : str = Field(... , description = "성명") # 필수 항목 weight : Optional[int] = Field(None, description = "체중") # 선택 항목 student = Student(id = "ID1", name = "홍길동") field1 = Field(... , description = "ID" ) print(type(field1)) print(student) """ id='ID1' name='홍길동' weight=None """ |
▶ requirements.txt
|
annotated-types==0.7.0 pydantic==2.7.4 pydantic_core==2.18.4 typing_extensions==4.12.2 |
※ pip install pydantic 명령을
더 읽기
■ BaseModel 클래스에서 Config 서브 클래스와 json_schema_extra 변수를 사용해 예제 코드를 설정하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
from pydantic import BaseModel class TodoItem(BaseModel): id : int item : str class Config: json_schema_extra = { "example" : { "id" : 1, "item" : "Example Schema!" } } |
■ BaseModel 클래스에서 Config 서브 클래스를 사용해 문서화시 예제 코드를 설정하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
from pydantic import BaseModel class TodoItem(BaseModel): id : int item : str class Config: json_schema_extra = { "example" : { "id" : 1, "item" : "Example Schema!" } } |
■ BaseSettings 클래스에서 Config 서브 클래스와 env_file 변수를 사용해 애플리케이션 설정 파일을 로드하는 방법을 보여준다. ▶ .env
|
DATABASE_URL = mongodb://localhost:27017/testdb |
▶ main.py
|
from pydantic_settings import BaseSettings class ApplicationSetting(BaseSettings): DATABASE_URL : str | None = None class Config: env_file = ".env" applicationSetting = ApplicationSetting() print(applicationSetting.DATABASE_URL) |
▶
더 읽기
■ BaseModel 클래스를 사용해 REST POST 요청 바디를 검증하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
from fastapi import FastAPI, APIRouter from pydantic import BaseModel class TodoItem(BaseModel): id : int item : str todoItemList = [] apiRouter = APIRouter() @apiRouter.post("/todo") async def addTodoItem(todoItem : TodoItem) -> dict: todoItemList.append(todoItem) return {"message" : "Todo item added successfully"} @apiRouter.get("/todo") async def getTodoItemList() -> dict: return {"todoItemList" : todoItemList} fastAPI = FastAPI() @fastAPI.get("/") def root(): return {"message" : "Hello World"} @fastAPI.get("/home") def home(): return {"message" : "home"} fastAPI.include_router(apiRouter) |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
annotated-types==0.6.0 anyio==4.3.0 certifi==2024.2.2 click==8.1.7 dnspython==2.6.1 email_validator==2.1.1 exceptiongroup==1.2.1 fastapi==0.111.0 fastapi-cli==0.0.3 h11==0.14.0 httpcore==1.0.5 httptools==0.6.1 httpx==0.27.0 idna==3.7 itsdangerous==2.2.0 Jinja2==3.1.4 markdown-it-py==3.0.0 MarkupSafe==2.1.5 mdurl==0.1.2 orjson==3.10.3 pydantic==2.7.1 pydantic-extra-types==2.7.0 pydantic-settings==2.2.1 pydantic_core==2.18.2 Pygments==2.18.0 python-dotenv==1.0.1 python-multipart==0.0.9 PyYAML==6.0.1 rich==13.7.1 shellingham==1.5.4 sniffio==1.3.1 starlette==0.37.2 typer==0.12.3 typing_extensions==4.11.0 ujson==5.10.0 uvicorn==0.29.0 uvloop==0.19.0 watchfiles==0.21.0 websockets==12.0 |
▶ FastAPI 서버 실행 명령
더 읽기