Django – 유효성 검사에 대한 글

수많은 정보를 저장하고 꺼내오고 해야 하는 시대에 Django 로 서비를 만들고 하다보면, 각각 필드의 유효성 검사에 대한 고민이 엄청 많다.

폼에서 하나 자바스크립트로 하나 model 에서 하나…등등등 아래 글에서 인사이트를 얻어보자 잘 정리해 두셨네. 강의를 들으면서 정리하신 내용 같은데 많은 도움이 되었어요 😊

[
Django Form Validation
출처 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%A5%EA%B3%A0-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard 장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생..
![](https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyWt1Y%2Fbtrq5pnLgX1%2FrSOA42FOPMPX2H7y4KKZsk%2Fimg.jpg)
](https://devdongbaek.tistory.com/88)

내가 만든 예제코드

from django.core.validators import MinLengthValidatordef validate_isdecimal(value):    if not value.isdecimal():        raise ValidationError(            _("%(value)s is not an deciamal number"),            params={"value": value},        )class Company(models.Model):    name = models.CharField(max_length=255)    vatid = models.CharField(max_length=255, unique=True, validators=[validate_isdecimal, MinLengthValidator(10)])  # 숫자가 아니거나, 10자리 이하는 에러 반환

결론

아니… 그러면 언제 Validators를 써야하고, 언제 clean을 써야해???

가급적이면 모든 validators는 model에 정의하고, ModelForm을 통해서 model validators 정보도 같이 가져와야 한다.
**validators는 웬만하면 model에 정의하자!!**

😊
clean() 을 오버라이드해서, validator에 위배되는 행동을 만약 clean() 함수 내에서 허용하면, 암만 모델에 정해둬도 유효성을 무시하고 데이터가 처리됨을 명심하시길!! form.is_valid() 이전에 호출 되기 때문 같네.

clean이 필요할 때는,

  • 특정 Form에서 1회성 유효성 검사 루틴이 필요할 때
  • 다수 필드값에 걸쳐서, 유효성 검사가 필요할 때
  • 필드 값을 변경할 필요가 있을 때 #validators는 값만 체크하고, 변경할 수는 없다.

빌트인 유효성 검사를 사용해

공식 사이트에서 제공하는 이미 준비된 Validators 들이 있다. 보고 활용을 하자.

[
Validators | Django documentation | Django
![](https://static.djangoproject.com/img/fundraising-heart.cd6bb84ffd33.svg)
](https://docs.djangoproject.com/en/4.0/ref/validators/#built-in-validators)

예제

from django.core.validators import MinLengthValidatorclass GameUserSignupForm(forms.ModelForm):    class Meta:        model = GameUser        fields = ['server','username']    def clean_username(self): # 필드명에 clean_을 붙여서 각 필드별로 유효성 처리및 데이터 변경을 수행함        return self.cleaned_data.get('username', '').strip()
Share: Twitter Facebook
Bongjun Hur's Picture

About Bongjun Hur

BJ is a dev.

Seoul, Korea https://devbj.com