123456789101112131415161718192021222324252627282930 |
- from netaddr import IPNetwork, AddrFormatError
- from django import forms
- from django.core.exceptions import ValidationError
- #
- # Form fields
- #
- class IPFormField(forms.Field):
- default_error_messages = {
- 'invalid': "Enter a valid IPv4 or IPv6 address (with CIDR mask).",
- }
- def to_python(self, value):
- if not value:
- return None
- if isinstance(value, IPNetwork):
- return value
- # Ensure that a subnet mask has been specified. This prevents IPs from defaulting to a /32 or /128.
- if len(value.split('/')) != 2:
- raise ValidationError('CIDR mask (e.g. /24) is required.')
- try:
- return IPNetwork(value)
- except AddrFormatError:
- raise ValidationError("Please specify a valid IPv4 or IPv6 address.")
|