본문 바로가기
백엔드

Django가 자동으로 검사해주는 것들(유용한 tip!)

by cook_code 2025. 4. 25.

1. 폼 필드 기반 유효성 검사

from django import forms

class MyForm(forms.Form):
    email = forms.EmailField(required=True)
    age = forms.IntegerField(min_value=0)
필드 타입자동 검사
EmailField 이메일 형식 자동 검사 (abc@xyz.com)
URLField http(s):// 포함한 유효한 URL인지
IntegerField(min_value=...) 최소/최대값 검사
CharField(max_length=...) 길이 초과 검사
DateField 날짜 형식 자동 파싱
ChoiceField(choices=...) 정의된 값 이외의 값 거부

2. 모델 필드 제약 검사

class User(models.Model):
    username = models.CharField(max_length=20, unique=True)
    age = models.PositiveIntegerField()
필드 속성검사 내용
max_length DB에서 에러 발생 전에 폼에서 차단
unique=True 중복 저장 불가 (DB + 폼 수준에서도 검사됨)
null=False, blank=False 공백 입력 불가 (폼 + DB 모두)
PositiveIntegerField 0보다 작은 값 거부

3. 폼 클래스에서 제공하는 기본 유효성 검사기

  • UserCreationForm, AuthenticationForm 등에서는 다음이 자동 적용됨:
검사 항목설명
비밀번호 길이 (MinimumLengthValidator) 기본 8자 이상
사용자 정보와 유사 여부 (UserAttributeSimilarityValidator) username/email과 비슷한 비번 거부
숫자/문자 혼합 (CommonPasswordValidator, NumericPasswordValidator) 단순하거나 숫자만인 비밀번호 거부

4. ModelForm 사용 시 자동 처리되는 것들

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = "__all__"
  • 모델의 모든 제약 조건 (unique, blank, choices, max_length, ...)이 자동 반영돼서 유효성 검사됨
  • 관리자 페이지에서도 그대로 적용됨

5. clean_<fieldname>() / clean() 메서드 활용 가능

def clean_username(self):
    val = self.cleaned_data['username']
    if 'admin' in val:
        raise forms.ValidationError("사용자 이름에 'admin'은 포함할 수 없습니다.")
    return val

→ 기본 검사를 커스터마이징하거나 추가 로직을 넣는 확장 포인트

반응형