django应用程序的mac地址模型和表单字段。
django-macaddress的Python项目详细描述
django的mac地址模型和表单字段
我们使用netaddr来解析和验证mac地址。测试不是 完成了。
欢迎使用修补程序:http://github.com/django-macaddress/django-macaddress
开始
settings.macaddress默认语言
要指定演示文稿的默认方言(和存储,请参见下文),请指定:
settings.MACADDRESS_DEFAULT_DIALECT = 'module.dialect_class'
其中,指定的值是由父python模块名组成的字符串 还有孩子的方言类名。例如:
settings.MACADDRESS_DEFAULT_DIALECT = 'netaddr.mac_eui48'
ps:默认情况下将使用macaddress.mac_linux的旧默认值(大写并除以“:”)。
如果在包模块中定义了自定义方言,则需要定义 类或导入到包的__init__.py。
default_dialect和format_mac
要获取项目的默认方言,请导入并调用default_dialect函数:
>>> from macaddress import default_dialect >>> dialect = default_dialect()
可以选择使用netaddr.EUI类实例作为参数调用此函数。如果没有 默认值在settings中定义,它将返回提供的EUI对象的方言。
format_mac函数接受一个EUI实例和一个方言类(netaddr.mac_eui48或 子类)作为其参数。方言类可以指定为字符串,方式与 settings.MACADDRESS_DEFAULT_DIALECT:
>>> from netaddr import EUI, mac_bare >>> from macaddress import format_mac >>> mac = EUI('00:12:3c:37:64:8f') >>> format_mac(mac, mac_bare) '00123C37648F' >>> format_mac(mac, 'netaddr.mac_cisco') '0012.3c37.648f'
macaddressfield(modelfield)
这是一个使用macaddressfield的示例模型:
from macaddress.fields import MACAddressField class Computer(models.Model): name = models.CharField(max_length=32) eth0 = MACAddressField(null=True, blank=True) ...
默认行为是在数据库中存储mac地址为bigInteger。 如果您愿意,可以将该值存储为字符串(例如,为了方便 子字符串搜索),可以指定integer=False,值将被存储 作为字符串:
class Computer(models.Model): name = models.CharField(max_length=32) eth0 = MACAddressField(blank=True, integer=False) ...
如果要在存储为字符串的macaddressfield上设置unique=True,则需要 设置null=True并在forms.ModelForm类上创建自定义clean_<foo>方法 当提供的值是''(空字符串)时返回None的每个macaddressfield:
from .models import Computer class ComputerForm(forms.ModelForm): class Meta: model = Computer def clean_eth0(self): return self.cleaned_data['eth0'] or None
在运行managy.py syncdb之后,应避免更改integer的值, 除非您使用的是架构迁移解决方案,如south或django的内置迁移。
待办事项
- 将mac作为字符串存储在数据库中时,添加对部分字符串查询的更大支持。 <> LI>在混合字符串和整数存储类型时,添加自定义验证器来检查重复的MACS。
- 添加用于转换到默认字符串存储的弃用警告和时间线。