[FastAPI] Basemodel 응용

Yoo·2025년 8월 25일

1. 이름 유효성 검사

from pydantic import BaseModel, field_validator
from codes.dns_servers import dns_servers

class dnsNameRequest(BaseModel): # DNS 서버 이름 유효성 검사
    name : str
    @field_validator('name')
    def name_servers(cls,value):
        if value not in dns_servers:
            raise ValueError(f"'{value}'는 유효한 DNS 서버가 아닙니다.")
        return value;

dnsNameRequest: validator 데코레이터를 사용하여 name 필드에 대해 유효성 검사 함수를 지정하여, dns_server에 name이 존재하는지 유효성 검사를 합니다.
잘못된 형식일 경우 ValueError를 사용하여 422 응답을 반환합니다.

@router.post("/apply", response_model=statusResponse)
def dns_apply(request: dnsNameRequest): 

2. IP 유효성 검사

from pydantic import BaseModel
from pydantic.networks import IPv4Address
class dnsIpRequest(BaseModel): # DNS IP 형식 유효성 검사
    ip : IPv4Address

dnsIpRequest: ip가 IPv4타입인지 유효성 검사를 해주는 BaseModel
잘못된 형식일 경우 자동으로 ValidationError을 반환합니다.

try:
        dnsIpRequest(ip=server_ip)
    except ValidationError:
        raise HTTPException(
            status_code=500,
            detail=f"{server_ip}는 유효한 IP 형식이 아닙니다."
        )

3. 응답 모델 1

class statusResponse(BaseModel):
    message : str

statusReponse: message가 str 타입인지 유효성 검사를 합니다.
잘못된 형식일 경우 를 발생

from pydantic import ValidationError
@router.post("/apply", response_model=statusResponse)

...

status = "Google로 설정 완료"
return {"message": status}
profile
월1억벌기

0개의 댓글