【问题标题】: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 函数和标准网络地址计算来进行过滤。

    【讨论】:

    • 如何查询“ip is in table”?
    • 比单独存储每个IP更有效吗?在查询速度方面
    • 在速度和存储方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2020-10-07
    • 2017-11-27
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多