Валидатор validate_ipv46_address
Валидатор validate_ipv46_address применяется для проверки того,
что переданное значение представляет собой корректный IP-адрес
четвертой или шестой версии. Он принимает строку и возбуждает
исключение ValidationError, если адрес не соответствует
ни одному из форматов. Валидатор автоматически определяет версию
протокола и проверяет адрес на соответствие правилам записи
для IPv4 или IPv6.
Синтаксис
from django.core.validators import validate_ipv46_address
validate_ipv46_address(value)
Параметры
Валидатор validate_ipv46_address принимает один обязательный
аргумент:
- value - строка, содержащая IP-адрес для проверки.
Валидатор не имеет дополнительных параметров. В случае успешной
проверки он ничего не возвращает, при ошибке возбуждает
исключение ValidationError с соответствующим сообщением.
Пример . Использование в форме
Создадим форму с полем для ввода IP-адреса и применим
валидатор validate_ipv46_address:
from 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
)
Теперь проверим форму с корректным адресом:
from django.core.exceptions import ValidationError
form = IPForm({"ip_address": "192.168.1.1"})
if form.is_valid():
print("Адрес корректен")
else:
print(form.errors)
Результат выполнения кода:
"Адрес корректен"
Пример . Обработка ошибки
Попробуем передать в форму некорректный адрес:
form = IPForm({"ip_address": "256.256.256.256"})
if form.is_valid():
print("Адрес корректен")
else:
print(form.errors["ip_address"])
Результат выполнения кода:
"Enter a valid IPv4 or IPv6 address."
Пример . С IPv6 адресом
Валидатор успешно проверяет и IPv6 адреса:
from 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)
Результат выполнения кода:
"IPv6 адрес корректен"
Пример . Использование в модели
Валидатор можно также применять в модели Django:
from 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
Попробуем сохранить объект с корректным адресом:
server = Server(name="Main Server", ip_address="10.0.0.1")
server.full_clean()
server.save()
print("Сервер сохранен")
Результат выполнения кода:
"Сервер сохранен"
Смотрите также
-
валидатор
validate_ipv4_address,
который проверяет только IPv4 адреса -
валидатор
validate_ipv6_address,
который проверяет только IPv6 адреса -
поле
GenericIPAddressField,
которое использует этот валидатор по умолчанию -
валидатор
DomainNameValidator,
который проверяет доменные имена