Валидатор validate_ipv4_address
Валидатор validate_ipv4_address применяется к полям форм для проверки,
что введенное значение является корректным IPv4-адресом.
Он проверяет формат адреса и диапазоны каждого октета.
В случае ошибки валидатор генерирует исключение ValidationError
с соответствующим сообщением. Этот валидатор особенно полезен
при работе с IP-адресами в веб-приложениях.
Синтаксис
from django.core.validators import validate_ipv4_address
from django import forms
class MyForm(forms.Form):
ip_address = forms.CharField(
validators=[validate_ipv4_address]
)
Валидатор принимает один обязательный аргумент - строку с IPv4-адресом.
В случае успешной проверки валидатор возвращает None,
в противном случае выбрасывает исключение ValidationError.
Пример . С формой
Рассмотрим пример использования валидатора в форме для ввода IP-адреса:
from django import forms
from django.core.validators import validate_ipv4_address
class ServerForm(forms.Form):
name = forms.CharField(max_length=100)
ip_address = forms.CharField(
label='IP-адрес сервера',
validators=[validate_ipv4_address],
help_text='Введите корректный IPv4-адрес'
)
port = forms.IntegerField(min_value=1, max_value=65535)
Проверка вручную
Валидатор можно использовать непосредственно в коде для проверки отдельных значений:
from django.core.validators import validate_ipv4_address
from django.core.exceptions import ValidationError
# Корректный адрес
try:
validate_ipv4_address('192.168.1.1')
print("Адрес корректен")
except ValidationError as e:
print(f"Ошибка: {e.message}")
# Некорректный адрес
try:
validate_ipv4_address('256.0.0.1')
print("Адрес корректен")
except ValidationError as e:
print(f"Ошибка: {e.message}")
Результат выполнения кода:
"Адрес корректен"
"Ошибка: Enter a valid IPv4 address."
Пример . С обработкой ошибок
Покажем, как обрабатывать ошибки валидации в представлении:
from django.shortcuts import render
from django.http import HttpResponse
from .forms import ServerForm
def add_server(request):
if request.method == 'POST':
form = ServerForm(request.POST)
if form.is_valid():
ip = form.cleaned_data['ip_address']
return HttpResponse(f"Сервер добавлен с IP: {ip}")
else:
form = ServerForm()
return render(request, 'add_server.html', {'form': form})
Особенности проверки
Валидатор validate_ipv4_address проверяет следующие условия:
from django.core.validators import validate_ipv4_address
from django.core.exceptions import ValidationError
# Проверка различных форматов адресов
addresses = [
'192.168.0.1', # Корректный
'10.0.0.0', # Корректный
'0.0.0.0', # Корректный
'255.255.255.255', # Корректный
'192.168.1.256', # Некорректный (октет > 255)
'192.168.1', # Некорректный (недостаточно октетов)
'192.168.1.1.1', # Некорректный (слишком много октетов)
'abc.def.ghi.jkl', # Некорректный (не числа)
]
for addr in addresses:
try:
validate_ipv4_address(addr)
print(f"'{addr}' - корректный адрес")
except ValidationError as e:
print(f"'{addr}' - ошибка: {e.message}")
Результат выполнения кода:
"'192.168.0.1' - корректный адрес"
"'10.0.0.0' - корректный адрес"
"'0.0.0.0' - корректный адрес"
"'255.255.255.255' - корректный адрес"
"'192.168.1.256' - ошибка: Enter a valid IPv4 address."
"'192.168.1' - ошибка: Enter a valid IPv4 address."
"'192.168.1.1.1' - ошибка: Enter a valid IPv4 address."
"'abc.def.ghi.jkl' - ошибка: Enter a valid IPv4 address."
Интеграция с ModelForm
Валидатор можно использовать и в формах на основе моделей:
from django.db import models
from django import forms
from django.core.validators import validate_ipv4_address
class Server(models.Model):
name = models.CharField(max_length=100)
ip_address = models.CharField(max_length=15)
class ServerForm(forms.ModelForm):
class Meta:
model = Server
fields = ['name', 'ip_address']
def clean_ip_address(self):
ip = self.cleaned_data['ip_address']
validate_ipv4_address(ip)
return ip
Смотрите также
-
валидатор
validate_ipv6_address,
который проверяет корректность IPv6-адресов -
валидатор
validate_ipv46_address,
который проверяет корректность IPv4 или IPv6-адресов -
валидатор
validate_domain_name,
который проверяет корректность доменных имен -
валидатор
URLValidator,
который проверяет корректность URL-адресов