django postgresql netfields实现
django-netfields的Python项目详细描述
此项目试图为 詹戈。在django pre 1.4中,内置的IPAddressField不支持ipv6 并在所有查找中使用无效的HOST()强制转换。从1.4开始,您可以使用 GenericIPAddressField用于ipv6,但转换问题仍然存在。
除了基本的IPAddressField替换aCIDR和 已添加MACADDR字段。这个库还提供了一个管理器 允许直接在orm中进行高级的基于ip的查找。
在python中,ip地址字段的值表示为 ipaddress模块。在python 2.x中,使用backport。mac地址 字段表示为来自netaddr模块的eui类型。
依赖关系
当前版本的代码的目标是django>;=1.8支持,因为这依赖于 大量使用orm内部组件和支持多个版本是非常棘手的。
入门
确保netfields位于PYTHONPATH和INSTALLED_APPS中。
InetAddressField将postgresql中的值存储为类型INET。在 python,该值将表示为ipaddress.ip_interface对象 表示IP地址和网络掩码/前缀长度对,除非 store_prefix_length参数设置为false`,在这种情况下 将表示为ipaddress.ip_address对象。
fromnetfieldsimportInetAddressField,NetManagerclassExample(models.Model):inet=InetAddressField()# ...objects=NetManager()
CidrAddressField将postgresql中的值存储为类型CIDR。在 python,该值将表示为ipaddress.ip_network对象。
fromnetfieldsimportCidrAddressField,NetManagerclassExample(models.Model):inet=CidrAddressField()# ...objects=NetManager()
MACAddressField将postgresql中的值存储为类型MACADDR。在 python,该值将表示为netaddr.EUI对象。请注意 eui对象的默认文本表示与 netaddr模块。它以更常用的格式表示 在网络实用程序和网络管理员(00:11:22:aa:bb:cc)中。
fromnetfieldsimportMACAddressField,NetManagerclassExample(models.Model):inet=MACAddressField()# ...
对于InetAddressField和CidrAddressField,需要NetManager。 以获得额外的查找。查找INET和CIDR 数据库类型的处理方式与运行vanilla django时不同。 所有查找都是不区分大小写的,并且在任何时候都避免了基于文本的查找 可能的。除了django的默认查找类型之外,还有 添加:
- __net_contained
- 包含在给定网络中
- __net_contained_or_equal
- 包含在给定网络内或等于给定网络
- __net_contains
- 包含给定地址
- __net_contains_or_equals
- 包含或等于给定的地址/网络
- __net_overlaps
- 包含或由给定地址包含
- __family
- 匹配给定的地址系列
- __host
- 匹配地址的主机部分,而不考虑前缀长度
它们与 http://www.postgresql.org/docs/9.4/interactive/functions-net.html
CidrAddressField包括两个额外的查找:
- __max_prefixlen
- 最大值(包含)^ {t5} $前缀,不区分IPv4和IPv6 < /dD>
- __min_prefixlen
- 前缀CIDR的最小值(含)不区分IPv4和IPv6
勘误表
- 在django<;1.9.6中,arrayFields中返回的类型是字符串,而不是ipaddress类型。见 https://code.djangoproject.com/ticket/25143
类似项目
https://bitbucket.org/onelson/django-ipyfield试图解决一些相同的问题 作为此库发布。然而,不是只支持通过适当的 字段类型ipyfield当前使用VARCHAR(39)作为伪无符号64位 实施中的编号。
历史记录
主回购协议最初被保留 2013年4月下旬,该项目被转移到https://github.com/jimfunk/django-postgresql-netfields 将火炬传递给实际使用此代码的人:—)