一个域名监控
思路如下
域名 -> IP -> IP 段
但是 IP 与 IP 段都分别有 v4 与 v6 的 且域名可能同时拥有 v4 与 v6 的 IP
想了半天也不知道怎么去设计
看了很多 Django 的多对多(ManyToManyField) 的文章也弄不懂
如下代码 Domain 类里面的属性 ip 是不是应该用多对多的方式
方法一的代码是不是不应该这样子写的
方法一
class IPv4Range(models.Model):
ipv4_range = models.CharField(max_length=20)
last_update = models.DateTimeField(auto_now_add=True)
class IPv6Range(models.Model):
ipv6_range = models.CharField(max_length=40)
last_update = models.DateTimeField(auto_now_add=True)
class IPv4Address(models.Model):
iprange = models.ForeignKey('IPv4Range', on_delete=models.PROTECT)
ipv4 = models.CharField(max_length=20)
last_update = models.DateTimeField(auto_now_add=True)
class IPv6Address(models.Model):
iprange = models.ForeignKey('IPv6Range', on_delete=models.PROTECT)
ipv6 = models.CharField(max_length=40)
last_update = models.DateTimeField(auto_now_add=True)
class Domain(models.Model):
ip = models.ForeignKey(IPv4Address, on_delete=models.PROTECT)
domain = models.CharField(max_length=255)
checked = models.BooleanField(default=False)
keyword = models.CharField(max_length=255)
add_date = models.DateTimeField(auto_now_add=True)
last_update = models.DateTimeField(auto_now=True)
方法二
class IPRange(models.Model):
ipv4_range = models.CharField(max_length=20, null=True)
ipv6_range = models.CharField(max_length=40, null=True)
last_update = models.DateTimeField(auto_now_add=True)
class IPAddress(models.Model):
iprange = models.ForeignKey('IPRange', on_delete=models.PROTECT)
ipv4 = models.CharField(max_length=20, null=True)
ipv6 = models.CharField(max_length=40, null=True)
last_update = models.DateTimeField(auto_now_add=True)
class Domain(models.Model):
ip = models.ForeignKey(IPAddress, on_delete=models.PROTECT)
domain = models.CharField(max_length=255)
checked = models.BooleanField(default=False)
keyword = models.CharField(max_length=255)
add_date = models.DateTimeField(auto_now_add=True)
last_update = models.DateTimeField(auto_now=True)