ProhibitNullCharactersValidator

Валидатор ProhibitNullCharactersValidator применяется к строковым полям формы и предотвращает ввод символов с кодом 0 (null-символов). Данный валидатор полезен, когда нужно гарантировать, что вводимые пользователем строки не содержат потенциально опасных или некорректных нулевых байтов. Валидатор срабатывает как для однострочных, так и для многострочных текстовых полей.

По умолчанию валидатор не требует дополнительных параметров, однако может принимать необязательный параметр message для кастомизации сообщения об ошибке.

Синтаксис

pythonfrom django.core.validators import ProhibitNullCharactersValidator

# Использование в поле формы
field = forms.CharField(
  validators=[ProhibitNullCharactersValidator()]
)

# С кастомным сообщением
field = forms.CharField(
  validators=[ProhibitNullCharactersValidator(
    message="Нулевые символы не допускаются"
  )]
)

Пример

Рассмотрим базовое использование валидатора в форме для регистрации пользователя:

pythonfrom django import forms
from django.core.validators import ProhibitNullCharactersValidator

class RegistrationForm(forms.Form):
  username = forms.CharField(
    max_length=50,
    validators=[ProhibitNullCharactersValidator()]
  )
  email = forms.EmailField()

# Проверка формы с валидными данными
form = RegistrationForm({
  'username': 'john_doe',
  'email': 'john@example.com'
})
print(form.is_valid())   # "True"

# Проверка формы с null-символом
form = RegistrationForm({
  'username': 'john\0doe',   # Символ null
  'email': 'john@example.com'
})
print(form.is_valid())   # "False"
print(form.errors['username'])   # Список с сообщением об ошибке

Результат выполнения кода:

python"True"
"False"
["This field contains a null character."]

Пример

Пример использования валидатора в форме создания статьи, где заголовок не должен содержать нулевые символы:

pythonfrom django import forms
from django.core.validators import ProhibitNullCharactersValidator

class ArticleForm(forms.Form):
  title = forms.CharField(
    max_length=100,
    validators=[ProhibitNullCharactersValidator()]
  )
  content = forms.CharField(
    widget=forms.Textarea,
    validators=[ProhibitNullCharactersValidator()]
  )

# Пример валидации данных
data = {
  'title': 'Interesting article',
  'content': 'Full text of the article without null chars'
}
form = ArticleForm(data)
print(form.is_valid())   # "True"

# Невалидные данные с null-символом в заголовке
invalid_data = {
  'title': 'Bad\0 title',
  'content': 'Some content'
}
form = ArticleForm(invalid_data)
print(form.is_valid())   # "False"
print(form.errors['title'])   # Сообщение об ошибке

Результат выполнения кода:

python"True"
"False"
["This field contains a null character."]

Пример

Кастомизация сообщения об ошибке для более понятного пользователю текста:

pythonfrom django import forms
from django.core.validators import ProhibitNullCharactersValidator

class CustomForm(forms.Form):
  comment = forms.CharField(
    widget=forms.Textarea,
    validators=[ProhibitNullCharactersValidator(
      message="В комментариях запрещены нулевые символы"
    )]
  )

# Проверка с невалидными данными
form = CustomForm({
  'comment': 'Valid text \0 with null'
})
print(form.is_valid())   # "False"
print(form.errors['comment'])   # Кастомное сообщение

Результат выполнения кода:

python"False"
["В комментариях запрещены нулевые символы"]

Смотрите также

  • валидатор MinLengthValidator,
    который проверяет минимальную длину строки
  • валидатор MaxLengthValidator,
    который проверяет максимальную длину строки
  • валидатор RegexValidator,
    который проверяет строку по регулярному выражению
  • поле CharField,
    которое может использовать данный валидатор