django + mysql,存储包含范围的ip地址

时间:2017-01-02 12:51:16

标签: mysql django django-models ip

我需要一种有效的方式来存储IP地址 我想要做的查询是IP在表中(或在范围内) 我需要存储范围,如

192.168.0.1 - 192.168.1.255  

还有个人IP。

由于有很多记录,我认为将它们逐一存储将是一种浪费。但如果那是最好的话我会坚持下去。 Django确实有GenericIPAddressField字段,但它不存储范围。

那么我最好的解决方案是什么?

1 个答案:

答案 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函数和标准网络地址计算来进行过滤。