Django 유효성 검증
장고에서 유효성을 검증하는 방법은 2가지가 있습니다.
1. Field를 정의할 때 필요한 옵션 인자로 주기
2. 따로 validator를 추가하기
validator를 따로 추가하여 유효성 검증하기
Validator는 임의의 값을 받아서 내부의 기준을 충족하지 않으면 ValidationError를 발생시키는 함수입니다.
Validator는 하나의 필드에 종속되지 않고 여러 필드에서 사용할 수 있으며 Django에서 기본적으로 제공하는 Built-in Validator를 사용하거나 필요하다면 Validator를 직접 구현하여 사용할 수 있습니다.
Built-in Validator
Built-in Validator는 장고 공식 문서를 참고하면 사용법과 여러 가지 Validator를 확인할 수 있습니다.
그중 최소 글자 수를 정해주는 Validator를 사용해보겠습니다.
# models.py
from django.db import models
from django.core.validators import MinLengthValidator
class Post(models.Model):
content = models.TextField(validators=[MinLengthValidator(10, '10자 이상 적어주세요!')
위의 코드처럼 사용할 Validator를 import 해준 후 사용할 모델 Field에 위와 같이 추가해주면 됩니다.
Validator 직접 구현
만약 원하는 Validator가 없거나 직접 추가하고 싶을 경우에는 Validator를 직접 만들어서 구현한 후 사용할 수 있습니다.
# validators.py
from django.core.exceptions import ValidationError
def validate_symbols(value):
if ("@" in value) or ("#" in value):
raise ValidationError("'@'와 '#'은 내용에 포함될 수 없습니다.", code='symbol-err')
위의 코드처럼 django.core.exceptions의 Validation Error를 import 해준 후, 함수를 직접 만들면 됩니다.
이때 raise를 이용해 오류를 발생시킨 후, ValidationError에 오류가 나타날 때 나올 메시지와 에러를 구분할 수 있는 코드를 적어주면 됩니다.
그 후 model에 이것을 적용해주면 됩니다.
# models.py
from django.db import models
from django.core.validators import MinLengthValidator
class Post(models.Model):
content = models.TextField(validators=[MinLengthValidator(10, '10자 이상 적어주세요!'),
validate_symbols])
위처럼 아까 작성해줬던 model에 뒤에 validate_symbols 추가해주어 content 필드에는 최소 10글자 이상의 내용을 적고,
그 내용 안에는 @ 또는 # 이 들어갈 수 없도록 설정하는 데에 성공했습니다!
'Study > Django' 카테고리의 다른 글
Django Model Queryset API / 장고 모델 쿼리셋 API (0) | 2021.12.12 |
---|---|
Django Validator / 장고 유효성 검증 / Form에서 유효성 검증하기 (0) | 2021.12.10 |
Django Validator / 장고 유효성 검증 / 내장 Field 옵션 (0) | 2021.12.10 |
Django의 CSRF 방지 / CSRF / Cross-Site Request Forgery (0) | 2021.12.09 |
Django traling slash / 장고 트레일링 슬래시 (0) | 2021.12.09 |