에듀테크 프로젝트 대시보드
파라미터 검증과 커스텀 검증기
선언적 제약(ge, max_length…)으로 대부분 커버하고, 복잡한 규칙은 검증기 함수로 처리합니다.
| 제약 | 의미 |
|---|---|
gt / ge / lt / le | 초과 / 이상 / 미만 / 이하 |
min_length / max_length | 문자열·리스트 길이 |
pattern | 정규식 (v1 의 regex) |
multiple_of | 배수 |
from pydantic import BaseModel, field_validator
class SignUp(BaseModel):
username: str
password: str
@field_validator("username")
@classmethod
def no_space(cls, v: str) -> str:
if " " in v:
raise ValueError("공백을 포함할 수 없습니다")
return v.lower() # 반환값이 최종 값이 됨from pydantic import BaseModel, model_validator
class Period(BaseModel):
start: int
end: int
@model_validator(mode="after")
def check_order(self):
if self.start > self.end:
raise ValueError("start 는 end 보다 클 수 없습니다")
return self{
"detail": [
{
"type": "string_too_short",
"loc": ["body", "password"],
"msg": "String should have at least 8 characters",
"input": "abc"
}
]
}loc 는 에러 위치 경로(body/query/path + 필드명).
from typing import Annotated
from pydantic import Field
Username = Annotated[str, Field(min_length=3, max_length=20, pattern=r"^[a-z0-9_]+$")]
class A(BaseModel): username: Username
class B(BaseModel): owner: Username