我需要一种有效的方式来存储IP地址 我想要做的查询是IP在表中(或在范围内) 我需要存储范围,如
192.168.0.1 - 192.168.1.255
还有个人IP。
由于有很多记录,我认为将它们逐一存储将是一种浪费。但如果那是最好的话我会坚持下去。 Django确实有GenericIPAddressField字段,但它不存储范围。
那么我最好的解决方案是什么?
答案 0 :(得分: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函数和标准网络地址计算来进行过滤。