【问题标题】:django + mysql, storing ip address including rangesdjango + mysql,存储IP地址,包括范围
【发布时间】:2017-01-02 12:51:15
【问题描述】:
我需要一种有效的方式来存储 IP 地址。
我想做的查询是 IP 是否在表中(或范围内)。
我需要存储范围,例如,
192.168.0.1 - 192.168.1.255
还有个人 IP。
由于记录很多,我认为将它们一个一个存储起来会很浪费。但如果那是最好的,我会去的。
Django 确实有 GenericIPAddressField 字段,但它不存储范围。
那么我最好的解决方案是什么?
【问题讨论】:
标签:
mysql
django
django-models
ip
【解决方案1】:
您有两个选择,都涉及使用两列。
选项一,存储起始IP结束IP
class IPmodel(models.Model):
start_ip = models.GenericIPAddressField()
end_ip = models.GenericIPAddressField()
选项 2,存储 IP 和网络掩码
class IPmodel(models.Model):
start_ip = models.GenericIPAddressField()
mask = models.IntegerField()
如果您使用选项 1,您的代码可能如下所示
IPmodel.objects.create(start_ip='192.168.1.0',end_ip='192.168.1.255')
IPmodel.objects.filter(end_ip__gt='192.168.1.10').filter(start_ip__lt='192.168.1.10')
如果您使用选项 2,则需要使用 F 函数和标准网络地址计算来进行过滤。