Django에서 모델을 설계할 때 단순히 필드를 정의하는 것만으로는 부족한 경우가 많습니다.
특히 입력값의 길이 제한, 특정 문자 금지 같은 검증 로직은
데이터가 저장되기 전에 반드시 체크되어야 합니다.
Django는 이를 위해 다양한 기본 validator를 제공하고 있으며,
필요하다면 직접 validator를 만들어 보다 세밀한 검증도 가능합니다.
이번 글에서는
Django에서 제공하는 기본 validator와 커스텀 validator를 함께 사용하는 방법을
간단한 Post 모델 예제를 통해 정리해보겠습니다.
1. Django에서 제공하는 기본 Validator 사용하기
Django는 여러 기본 validator를 제공합니다.
대표적인 예가 MinLengthValidator입니다.
from django.core.validators import MinLengthValidator
아래 코드는 내용(content)이 최소 10자 이상인지 검사합니다.
content = models.TextField(
validators=[
MinLengthValidator(10, "너무 짧군요! 10자 이상 적어주세요!")
]
)
별도 구현 없이 바로 사용 가능하며 에러 메시지를 커스터마이징할 수 있음
2. 직접 Validator 만들어보기 (Custom Validator)
기본 validator로 부족한 경우, 직접 validator를 만들어서 사용할 수 있습니다.
1️⃣ validators.py 파일 생성
from django.core.exceptions import ValidationError
def validate_symbols(value):
if ('@' in value) or ('#' in value):
raise ValidationError(
'"@"와 "#"는 포함될 수 없습니다.',
code='symbol-err'
)
- validator는 값(value)을 인자로 받는 함수
- 조건에 맞지 않으면 ValidationError를 발생시킴
- 문자열, 숫자, 날짜 등 어떤 필드에도 적용 가능
2️⃣ 모델에서 Custom Validator 사용하기
from .validators import validate_symbols
content = models.TextField(
validators=[
MinLengthValidator(10, "너무 짧군요! 10자 이상 적어주세요!"),
validate_symbols
]
)
Django 기본 validator와 리스트로 함께 사용 가능하며 여러 검증 조건을 순차적으로 적용할 수 있음
3. 모델 전체 코드 예시
from django.db import models
from django.core.validators import MinLengthValidator
from .validators import validate_symbols
class Post(models.Model):
title = models.CharField(
max_length=50,
unique=True,
error_messages={
'unique': '이미 있는 제목이네요!!!!!'
}
)
content = models.TextField(
validators=[
MinLengthValidator(10, "너무 짧군요! 10자 이상 적어주세요!"),
validate_symbols
]
)
4. Validator를 분리해서 관리하는 이유
✔️ 여러 모델/폼에서 재사용 가능
✔️ 테스트 작성이 쉬워짐
✔️ 비즈니스 규칙을 한 곳에서 관리 가능
모델이 복잡해질수록 validator를 분리하는 구조는 거의 필수에 가깝습니다.
5. 정리하면
Django는 기본 validator + 커스텀 validator 조합이 매우 강력함
단순한 조건은 기본 validator
도메인 규칙은 custom validator로 분리
실무에서도 가장 많이 쓰이는 패턴 중 하나
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| Django Form Validation 에러 출력 방법: form.as_ul vs 수동 렌더링 (0) | 2026.01.11 |
|---|---|
| Django Form에서 유효성 검증 (0) | 2026.01.11 |
| Model 단계에서의 유효성 검사 (1) | 2026.01.11 |
| ModelForm이란? (0) | 2026.01.11 |
| Django Form Method POST 처리 흐름 정리 (0) | 2026.01.10 |