Django에서는 입력 시점의 유효성 검증과
이미 저장된 데이터의 유효성 점검을
서로 다른 역할로 나누어 관리하는 것이 좋습니다.
- validators.py → 입력값 검증 규칙
- validate_data.py → 기존 데이터 점검/정리
이번 구조는 위의 두 가지로 나뉩니다.
1. validators.py – 입력 단계 유효성 검증
validators.py에는 필드 단위 유효성 규칙을 정의합니다.
from django.core.exceptions import ValidationError
def validate_symbols(value):
if ('@' in value) or ('#' in value) or ('&' in value):
raise ValidationError(
'"@", "#", "&"는 포함될 수 없습니다.',
code='symbol-err'
)
- 폼 제출 / 모델 저장 시 자동 실행
- 잘못된 값은 저장 자체를 차단
- Django의 ValidationError 메커니즘 활용
즉, 앞으로 들어오는 데이터를 막는 역할입니다.
2. validate_data.py – 기존 데이터 검증 모듈
validate_data.py는 이미 DB에 저장된 데이터를 대상으로
점검하거나 정리하기 위한 스크립트입니다.
from .models import Post
def validate_post():
posts = Post.objects.all()
for post in posts:
if '&' in post.content:
print(post.id, '번 글에 &가 있습니다.')
post.content = post.content.replace('&', '')
post.save()
유효성 규칙 추가 후 데이터 일괄 점검 후 수정
3. Django Shell에서 실행
python manage.py shell
# Django 셀 실행 후
>> from posts.validate_data import validate_post
>?> validate_post()
이미 적재된 데이터는 validate_post() 함수를 기반으로 유효성 검사를 진행
4. 정리하면
| 구분 | validators.py | validate_date.py |
| 대상 | 신규 입력 데이터 | 기존 DB 데이터 |
| 실행 시점 | 저장/폼 검증 시 | 수동 실행 |
| 목적 | 저장 차단 | 유효성 정검 및 정리 |
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| GET 메서드에서 경로 스트링과 쿼리 스트링을 사용하는 이유 (0) | 2026.01.17 |
|---|---|
| Django Paginator 사용 정리 (0) | 2026.01.16 |
| Django 더미 데이터 생성 – django-seed 사용 및 주의점 (0) | 2026.01.14 |
| Django에서 서버 에러 대신 404로 응답하기: get_object_or_404 사용 이유 (0) | 2026.01.13 |
| Django ORM 조회 결과가 없을 때 템플릿에서 처리하는 방법 (if / for 예제) (0) | 2026.01.13 |