Interview question
How do you use Django's built-in validators and create custom field validators? Django के built-in validators कैसे use करें और custom field validators कैसे बनाएं?
Answer
Validators are callables that raise ValidationError if a value doesn't meet a condition. Django ships several built-in ones and lets you attach custom validators to any form or model field.
from django.core.validators import MinLengthValidator, MaxValueValidator, RegexValidator
from django.core.exceptions import ValidationError
from django import forms
# Built-in validators applied directly to a field
class BookForm(forms.Form):
title = forms.CharField(validators=[MinLengthValidator(3)])
rating = forms.IntegerField(validators=[MaxValueValidator(5)])
isbn = forms.CharField(validators=[
RegexValidator(r'^\d{3}-\d{10}$', 'Enter a valid ISBN (XXX-XXXXXXXXXX)')
])
# CUSTOM validator function - a standalone callable
def validate_even(value):
if value % 2 != 0:
raise ValidationError(f'{value} is not an even number')
class QuantityForm(forms.Form):
quantity = forms.IntegerField(validators=[validate_even])
# Custom validator with a configurable message
def validate_no_profanity(value):
banned_words = ['spam', 'scam']
for word in banned_words:
if word in value.lower():
raise ValidationError(
'%(value)s contains inappropriate content',
params={'value': value},
)
# Applying a custom validator on a MODEL field (reused everywhere the model is used)
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200, validators=[validate_no_profanity])
# Model field validators run when full_clean() is called
# (automatically via ModelForm, or manually):
book = Book(title='spam book')
try:
book.full_clean() # triggers all field validators
except ValidationError as e:
print(e.message_dict)
# Combining multiple validators on one field
class PasswordForm(forms.Form):
password = forms.CharField(validators=[
MinLengthValidator(8),
RegexValidator(r'\d', 'Password must contain at least one digit'),
])Validators callables हैं जो value condition पूरी न करने पर ValidationError raise करते हैं। Django कई built-in validators देता है और custom validators किसी भी form/model field पर attach हो सकते हैं।
from django.core.validators import MinLengthValidator, MaxValueValidator, RegexValidator
from django.core.exceptions import ValidationError
from django import forms
class BookForm(forms.Form):
title = forms.CharField(validators=[MinLengthValidator(3)])
rating = forms.IntegerField(validators=[MaxValueValidator(5)])
isbn = forms.CharField(validators=[
RegexValidator(r'^\d{3}-\d{10}$', 'सही ISBN डालें')
])
# Custom validator function
def validate_even(value):
if value % 2 != 0:
raise ValidationError(f'{value} even number नहीं है')
class QuantityForm(forms.Form):
quantity = forms.IntegerField(validators=[validate_even])
def validate_no_profanity(value):
banned_words = ['spam', 'scam']
for word in banned_words:
if word in value.lower():
raise ValidationError(
'%(value)s में inappropriate content है',
params={'value': value},
)
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200, validators=[validate_no_profanity])
book = Book(title='spam book')
try:
book.full_clean()
except ValidationError as e:
print(e.message_dict)Was this answer clear?