Генерация IPv4-адреса определенной подсети с помощью factory_boy и фейкера для модели django - PullRequest
0 голосов
/ 30 ноября 2018

Gretss Всем!

Ниже приведен скрипт для заполнения модели с помощью фейкера.Faker позволяет использовать аргумент address_class.Указание address_class = 'a' сужает его, но только до 10.0.0.0/8.Как настроить генератор дальше, например на 10.10.10.0/24?

import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
django.setup()
from workplace.models import IpAddress
import factory
import faker
from faker.providers import internet
faker = faker.Factory.create()


class IpAddressFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = IpAddress
        django_get_or_create = ('ip_address',)
    ip_address = faker.ipv4_private(address_class='a')


ip = IpAddressFactory()
print(ip)

1 Ответ

0 голосов
/ 30 ноября 2018

Это скорее обходной путь, чем правильное решение:

ipv4_private использует класс _IPv4Constants._private_networks из providers.internet

Настройка _private_networks в class IPv4Constants делает трюк

/ lib / python3.7 / site-пакеты / faker / provider / internet / init .py`

class _IPv4Constants:
    """
    IPv4 network constants used to group networks into different categories.
    Structure derived from `ipaddress._IPv4Constants`.

    Excluded network list is updated to comply with current IANA list of
    private and reserved networks.
    """
    # Three common private networks from class A, B and CIDR
    # to generate private addresses from.
    _private_networks = [
        # ip_network('10.0.0.0/8'),
        # ip_network('172.16.0.0/12'),
        # ip_network('192.168.0.0/16'),
        ip_network('10.10.10.0/24'),

    ]
...