Валидатор validate_ipv46_address

Валидатор validate_ipv46_address применяется для проверки того, что переданное значение представляет собой корректный IP-адрес четвертой или шестой версии. Он принимает строку и возбуждает исключение ValidationError, если адрес не соответствует ни одному из форматов. Валидатор автоматически определяет версию протокола и проверяет адрес на соответствие правилам записи для IPv4 или IPv6.

Синтаксис

pythonfrom django.core.validators import validate_ipv46_address

validate_ipv46_address(value)

Параметры

Валидатор validate_ipv46_address принимает один обязательный аргумент:

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

Пример . Использование в форме

Создадим форму с полем для ввода IP-адреса и применим валидатор validate_ipv46_address:

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

class IPForm(forms.Form):
  ip_address = forms.CharField(
    label="IP-адрес",
    validators=[validate_ipv46_address],
    max_length=45
  )

Теперь проверим форму с корректным адресом:

pythonfrom django.core.exceptions import ValidationError

form = IPForm({"ip_address": "192.168.1.1"})
if form.is_valid():
  print("Адрес корректен")
else:
  print(form.errors)

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

python"Адрес корректен"

Пример . Обработка ошибки

Попробуем передать в форму некорректный адрес:

pythonform = IPForm({"ip_address": "256.256.256.256"})
if form.is_valid():
  print("Адрес корректен")
else:
  print(form.errors["ip_address"])

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

python"Enter a valid IPv4 or IPv6 address."

Пример . С IPv6 адресом

Валидатор успешно проверяет и IPv6 адреса:

pythonfrom django.core.validators import validate_ipv46_address
from django.core.exceptions import ValidationError

try:
  validate_ipv46_address("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
  print("IPv6 адрес корректен")
except ValidationError as e:
  print(e.message)

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

python"IPv6 адрес корректен"

Пример . Использование в модели

Валидатор можно также применять в модели Django:

pythonfrom django.db import models
from django.core.validators import validate_ipv46_address

class Server(models.Model):
  name = models.CharField(max_length=100)
  ip_address = models.CharField(
    max_length=45,
    validators=[validate_ipv46_address],
    help_text="Введите IPv4 или IPv6 адрес"
  )

  def __str__(self):
    return self.name

Попробуем сохранить объект с корректным адресом:

pythonserver = Server(name="Main Server", ip_address="10.0.0.1")
server.full_clean()
server.save()
print("Сервер сохранен")

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

python"Сервер сохранен"

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

  • валидатор validate_ipv4_address,
    который проверяет только IPv4 адреса
  • валидатор validate_ipv6_address,
    который проверяет только IPv6 адреса
  • поле GenericIPAddressField,
    которое использует этот валидатор по умолчанию
  • валидатор DomainNameValidator,
    который проверяет доменные имена