一、app的本質就是一個文件夾python
二、之後全部的app調用數據就只去repository調用django
三、不用每一個app創建一個庫服務器
四、也避免了多個app同事修改同一條數據的衝突app
from django.db import modelsspa
一、服務器信息信息表設計
hostname = models.CharField(max_length=128, unique=True) sn = models.CharField('SN號', max_length=64, db_index=True) manufacturer = models.CharField(verbose_name='製造商', max_length=64, null=True, blank=True) model = models.CharField('型號', max_length=64, null=True, blank=True) manage_ip = models.GenericIPAddressField('管理IP', null=True, blank=True) os_platform = models.CharField('系統', max_length=16, null=True, blank=True) os_version = models.CharField('系統版本', max_length=16, null=True, blank=True) cpu_count = models.IntegerField('CPU個數', null=True, blank=True) cpu_physical_count = models.IntegerField('CPU物理個數', null=True, blank=True) cpu_model = models.CharField('CPU型號', max_length=128, null=True, blank=True) create_at = models.DateTimeField(auto_now_add=True, blank=True) class Meta: verbose_name_plural = "服務器表" def __str__(self): return self.hostname
二、硬盤信息表orm
class Disk(models.Model): """ 硬盤信息 """ slot = models.CharField('插槽位', max_length=8) model = models.CharField('磁盤型號', max_length=32) capacity = models.FloatField('磁盤容量GB') pd_type = models.CharField('磁盤類型', max_length=32) server_obj = models.ForeignKey('Server',related_name='disk') class Meta: verbose_name_plural = "硬盤表" def __str__(self): return self.slot
三、網卡信息表server
class NIC(models.Model): """ 網卡信息 """ name = models.CharField('網卡名稱', max_length=128) hwaddr = models.CharField('網卡mac地址', max_length=64) netmask = models.CharField(max_length=64) ipaddrs = models.CharField('ip地址', max_length=256) up = models.BooleanField(default=False) server_obj = models.ForeignKey('Server',related_name='nic') class Meta: verbose_name_plural = "網卡表" def __str__(self): return self.name
四、內存信息表對象
class Memory(models.Model): """ 內存信息 """ slot = models.CharField('插槽位', max_length=32) manufacturer = models.CharField('製造商', max_length=32, null=True, blank=True) model = models.CharField('型號', max_length=64) capacity = models.FloatField('容量', null=True, blank=True) sn = models.CharField('內存SN號', max_length=64, null=True, blank=True) speed = models.CharField('速度', max_length=16, null=True, blank=True) server_obj = models.ForeignKey('Server',related_name='memory') class Meta: verbose_name_plural = "內存表" def __str__(self): return self.slot
1. 檢查server表中是否有當前資產信息【主機名是惟一標識】blog
if not server_dict['basic']['status']: return HttpResponse('臣妾作不到') hostname = server_dict['basic']['data']['hostname'] server_obj = models.Server.objects.filter(hostname=hostname).first()
二、沒有就建立,服務器和網卡,內存,硬盤...
if not server_obj: pass # 沒有就建立,服務器和網卡,內存,硬盤...
三、不然再也不建立server對象,新老數據對比
else: # 再也不建立server對象,新老數據對比 # 硬盤
一、新數據(客戶端發送過來的數據)
new_disk = server_dict['disk']['data'] """ { '0': {'slot': '0', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006 LS08S0K2B5NV'}, '1': {'slot': '1', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006 LS08S0K2B5AH'}, '2': {'slot': '2', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1SZNSAFA01085L Samsung SSD 850 PRO 512GB EXM01B6Q'}, '3': {'slot': '3', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1AXNSAF912433K Samsung SSD 840 PRO Series DXM06B0Q'}, '4': {'slot': '4', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1AXNSAF303909M Samsung SSD 840 PRO Series DXM05B0Q'}, '5': {'slot': '5', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1AXNSAFB00549A Samsung SSD 840 PRO Series }"""
二、老數據(服務器端庫的數據)
old_disk = server_obj.disk_set.values('slot','model','capacity','pd_type') """ [ {'slot': 1, 'model':'xx', 'capacity':'xxx', 'pd_type':'xx'}, {'slot': 2, 'model':'xx', 'capacity':'xxx', 'pd_type':'xx'}, {'slot': 3, 'model':'xx', 'capacity':'xxx', 'pd_type':'xx'}, {'slot': 9, 'model':'xx', 'capacity':'xxx', 'pd_type':'xx'}, ] """
一、根據槽位進行比較: new_disk有,old_disk沒有 -> 0,4,5 使用create(**dic)方法
二、 根據槽位進行比較: old_disk有,new_disk沒有 -> 0,4,5 使用delete方法
三、 根據槽位進行比較: old_disk有,new_disk有 -> 1,2,3 使用update方法