用于django模型的具有bigint存储的ipy.ip实例
django-ipyfield的Python项目详细描述
ipyfield为 django 允许将IP地址存储为“假装”PositiveBigInt (当前为varchar(39),直到我找到如何获得无符号64位 所有支持的数据库中的整数列) 在数据库端使用IPy来处理 在python端转换为IPy.IP实例(或None)。
Wut?
以它的方式,它为我们提供了一种一致存储ipv4和ipv6的方法 不用把它们扔进长长的沙场。而且,它给了我们一个简单的方法 在数据传入时进行验证,同时允许我们访问其他元数据 信息(基本上 IPy太棒了)。
安装
使用pip:
pip install django-ipyfield
或者用easy_install:
easy_install django-ipyfield
用法
在您的模型中,执行以下操作:
from django.db import models from ipyfield.models import IPyField class MyModel(models.Model): # the regular params should work well enough here ipaddr = IPyField() # ... and so on
从这里开始,对obj.ipaddr的任何赋值都可以被视为构造函数 新IPy.IP实例的参数。任何IP()可以用来创建新的 可以使用对象。
在查询时,我额外添加了一块语法糖。为了 __in(range)查找,可以传递cidr符号地址范围,用于 示例:
MyModel.objects.filter(ipaddr__in='10.0.0.0/24')
目前您需要使用这种形式的表示法来支持这种类型的 查询。现在,如果需要使用prefix-netmask样式表示法,请传递它 使用生成的实例作为筛选参数。
待办事项
- 找出如何在所有数据库中构建大小适当的整数字段。
更改日志
- 0.1.6
- 添加了对gt、gte、lt和lte查找的支持。
- 0.1.5
- 增加了南部支持。
- 0.1.4
- 与非IP实例相比,ipy.ip实例引发异常。这个 当您进入modelform验证时会成为一个问题(在 仅使用orm)处理空/空值。通过子类化修复 (包装)ipy.ip.
- 0.1.3
- 基本字段功能就位。