Поле GenericIPAddressField
Поле GenericIPAddressField в Django формах используется для приема и валидации IP-адресов. Оно поддерживает как IPv4, так и IPv6 форматы, предоставляя гибкую настройку протоколов. Поле автоматически проверяет корректность введенного адреса и преобразует его в строковый формат. При создании поля можно указать параметры protocol для ограничения протоколов и unpack_ipv4 для обработки IPv4-адресов в IPv6-формате.
Синтаксис
from django import forms
field = forms.GenericIPAddressField(
protocol='both', # 'both', 'IPv4', 'IPv6'
unpack_ipv4=False,
required=True,
label='IP Address',
initial='',
help_text='Enter a valid IP address'
)
Параметры
Основные параметры поля GenericIPAddressField:
-
protocol- определяет поддерживаемые протоколы:'both'(по умолчанию),'IPv4'или'IPv6' -
unpack_ipv4- если установлен вTrue, преобразует IPv4-адреса из формата IPv6 ('::ffff:192.0.2.1') в обычный IPv4 ('192.0.2.1') -
required- указывает, обязательно ли поле для заполнения -
label- текст метки для поля -
initial- начальное значение поля
Пример . С формой
Создадим форму для ввода IP-адреса сервера:
from django import forms
class ServerForm(forms.Form):
server_ip = forms.GenericIPAddressField(
protocol='both',
label='Server IP Address',
help_text='Enter IPv4 or IPv6 address'
)
server_name = forms.CharField(max_length=100)
Пример . С ограничением протокола
Создадим форму, которая принимает только IPv6 адреса:
from django import forms
class IPv6Form(forms.Form):
ipv6_address = forms.GenericIPAddressField(
protocol='IPv6',
label='IPv6 Address',
help_text='Enter a valid IPv6 address'
)
Пример . С обработкой данных
Обработаем данные формы с IP-адресом:
from django import forms
class NetworkForm(forms.Form):
router_ip = forms.GenericIPAddressField(
protocol='both',
unpack_ipv4=True
)
subnet_mask = forms.CharField(max_length=15)
# Пример использования
form_data = {
'router_ip': '::ffff:192.168.1.1',
'subnet_mask': '255.255.255.0'
}
form = NetworkForm(form_data)
if form.is_valid():
router_ip = form.cleaned_data['router_ip']
print(router_ip)
Результат выполнения кода:
"192.168.1.1"
Пример . С валидацией
Поле GenericIPAddressField автоматически проверяет корректность введенного адреса:
from django import forms
class FirewallForm(forms.Form):
source_ip = forms.GenericIPAddressField(
protocol='both',
label='Source IP'
)
destination_ip = forms.GenericIPAddressField(
protocol='both',
label='Destination IP'
)
# Пример с неверным адресом
invalid_data = {
'source_ip': '256.256.256.256',
'destination_ip': '2001:db8::1'
}
form = FirewallForm(invalid_data)
if not form.is_valid():
errors = form.errors
print(errors)
Результат выполнения кода:
{"source_ip": ["Enter a valid IPv4 or IPv6 address."]}
Смотрите также
-
поле
CharField,
которое используется для текстовых строк -
поле
EmailField,
которое валидирует email-адреса -
поле
URLField,
которое валидирует URL-адреса -
валидатор
validate_ipv46_address,
который используется для проверки IP-адресов