Валидатор validate_ipv4_address

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

Синтаксис

pythonfrom 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-адреса:

pythonfrom 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)

Проверка вручную

Валидатор можно использовать непосредственно в коде для проверки отдельных значений:

pythonfrom 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}")

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

python"Адрес корректен"
"Ошибка: Enter a valid IPv4 address."

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

Покажем, как обрабатывать ошибки валидации в представлении:

pythonfrom 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 проверяет следующие условия:

pythonfrom 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}")

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

python"'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

Валидатор можно использовать и в формах на основе моделей:

pythonfrom 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-адресов