РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
23 of 818 menu

GenericIPAddressField

Поле GenericIPAddressField применяется в моделях Django для хранения IP-адресов в формате IPv4 или IPv6. Это поле поддерживает валидацию вводимых значений и предоставляет гибкие настройки для работы с протоколами. В базу данных значение сохраняется в виде строки, но при извлечении автоматически преобразуется в строковый формат, удобный для использования.

Синтаксис

from django.db import models class YourModel(models.Model): ip_address = models.GenericIPAddressField( verbose_name="IP-адрес", protocol='both', unpack_ipv4=False, null=False, blank=False, default='127.0.0.1' )

Параметры поля

Основные параметры GenericIPAddressField:

  • protocol - определяет допустимые протоколы. Принимает значения 'both' (по умолчанию), 'IPv4' или 'IPv6'
  • unpack_ipv4 - если установлено в True, IPv4-адреса в формате IPv6 (например, '::ffff:192.0.2.1') будут преобразованы в обычный IPv4 ('192.0.2.1')
  • null - разрешает или запрещает значение NULL в базе данных
  • blank - разрешает или запрещает пустое значение в формах
  • default - значение по умолчанию для поля

Пример . Создание модели

Рассмотрим модель для хранения информации о серверах с IP-адресами:

from django.db import models class Server(models.Model): name = models.CharField(max_length=100) ipv4_address = models.GenericIPAddressField( protocol='IPv4', verbose_name='IPv4 адрес' ) ipv6_address = models.GenericIPAddressField( protocol='IPv6', null=True, blank=True, verbose_name='IPv6 адрес' ) any_ip = models.GenericIPAddressField( protocol='both', default='0.0.0.0', verbose_name='Любой IP' ) def __str__(self): return self.name

Создание и сохранение объектов

Создадим несколько серверов с разными IP-адресами:

from myapp.models import Server # Создание сервера с IPv4 адресом server1 = Server.objects.create( name='web-server-1', ipv4_address='192.168.1.10', any_ip='192.168.1.10' ) # Создание сервера с IPv6 адресом server2 = Server.objects.create( name='web-server-2', ipv4_address='10.0.0.5', ipv6_address='2001:0db8:85a3:0000:0000:8a2e:0370:7334', any_ip='2001:0db8:85a3:0000:0000:8a2e:0370:7334' ) # Создание сервера только с IPv6 server3 = Server.objects.create( name='web-server-3', ipv4_address='172.16.0.1', ipv6_address='::1', any_ip='::1' )

Пример . Фильтрация по IP-адресам

Отфильтруем серверы, у которых IP-адрес начинается с определенной подсети:

from myapp.models import Server # Поиск серверов с IP в подсети 192.168.1.0/24 servers = Server.objects.filter( ipv4_address__startswith='192.168.1.' ) for server in servers: print(f"{server.name}: {server.ipv4_address}")

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

"web-server-1: 192.168.1.10"

Пример . Работа с протоколами

Продемонстрируем использование параметра unpack_ipv4 для преобразования IPv4-адресов из формата IPv6:

from django.db import models class NetworkDevice(models.Model): name = models.CharField(max_length=100) ip_address = models.GenericIPAddressField( protocol='both', unpack_ipv4=True ) # Создание устройства с IPv6-представлением IPv4 device = NetworkDevice.objects.create( name='router-1', ip_address='::ffff:192.0.2.1' ) # При извлечении адрес будет преобразован в IPv4 print(device.ip_address)

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

"192.0.2.1"

Пример . Валидация IP-адресов

Поле GenericIPAddressField автоматически проверяет корректность вводимых адресов. Попробуем сохранить неверный адрес:

from myapp.models import Server from django.core.exceptions import ValidationError try: # Попытка создать сервер с неверным IPv4 адресом invalid_server = Server.objects.create( name='invalid-server', ipv4_address='256.256.256.256' ) except ValidationError as e: print("Ошибка валидации:") print(e)

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

"Ошибка валидации:" "{'ipv4_address': ['Enter a valid IPv4 address.']}"

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

  • поле CharField,
    которое используется для хранения строковых значений
  • поле URLField,
    которое предназначено для хранения URL-адресов
  • поле EmailField,
    которое используется для хранения email-адресов
  • поле SlugField,
    которое применяется для хранения коротких меток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить