zoukankan      html  css  js  c++  java
  • CMDB服务器管理系统【s5day91】:数据库表结构补充

    1、表机构补充图

    2、用户信息表(UserProfile)

    1、解决了什么问题

    1、这台服务器是谁管理的?
    2、真正出问题了我敢上去改代码了?不能
    3、所以一台机器必须有运维人员和业务负责人,但是业务负责人不登陆这个系统,
    4、要想登陆这个系统必须要用用户名密码,但是我这里只有部分人登录,应该怎么写

    2、代码

    class UserProfile(models.Model):
        """
        用户信息,运维管理员和业务负责人 50人
        """
        name = models.CharField('姓名', max_length=32)
        email = models.EmailField('邮箱')
        phone = models.CharField('座机', max_length=32)
        mobile = models.CharField('手机', max_length=32)
    
        class Meta:
            verbose_name_plural = "用户表"
    
        def __str__(self):
            return self.name
    

    3、管理用户登录表(Admininfo)

    1、解决了什么问题

    1、有些用户可以登录有些不可以,所以要做一个表关联
    2、一个人只能有一个用户名和密码
    3、能登录在这AdminInfo这张表,不能登录的在UserProfile表里

    2、代码

    class AdminInfo(models.Model):
        """
        用户登录: 10
        """
        user = models.OneToOneField("UserProfile")
        username = models.CharField('用户名', max_length=32)
        password = models.CharField('密码', max_length=32)
    	
    

    4、服务器表

    1、解决了什么问题

    1、这个机器在那个机房?
    2、属于哪个部门,所以我们要创建一个表,包含机房和部门
    3、刚买回来的服务器没有部门,部门就是运维部,
    4、部门和服务器是什么关系?
    5、在小公司可能会出现服务器和业务线应该是多对多,但是有正规的有运维工程师的或者做运维自动化的公司,
     一定保证一个服务器只属于一个业务线
    6、必须要用就写个多对多的话
     你说这台服务器要不要有管理员?要不要有业务负责人?业务线的负责人

    2、代码

    class Server(models.Model):
        """
        服务器信息
        """
        # asset = models.OneToOneField('Asset')
    
    
        idc = models.ForeignKey(IDC,null=True, blank=True)
        cabinet_num = models.CharField('机柜号', max_length=30, null=True, blank=True)
        cabinet_order = models.CharField('机柜中序号', max_length=30, null=True, blank=True)
    
        business_unit = models.ForeignKey(BusinessUnit,null=True, blank=True)
    	tags = models.ManyToManyField(Tag)
    

    5、业务线表(BusinessUnit)

    1、解决了什么问题:

    1、在公司的运维的力度不是管这台机器,他管这个部门
    2、一个人管100台机器,一个运维负责一个或多个部门
    3、所以管理员没有必要给它写在这,他和业务线关联,业务线又和服务器关联

    2、代码

    class BusinessUnit(models.Model):
        """
        业务线(部门)
        """
        name = models.CharField('业务线', max_length=64, unique=True) # 销售,1,2
    	""" 如果反向查找,就有两个ForeignKey,这种情况一定要加related_name """
        contact = models.ForeignKey(UserGroup,related_name='c') # 业务线联系人:1
        manager = models.ForeignKey(UserGroup,related_name='m') # 运维管理人员:2
    
        class Meta:
            verbose_name_plural = "业务线表"
    
        def __str__(self):
            return self.name
    

    6、用户组表

    1、待解决问题:

    1、如果业务线联系人和运维管理人员联系不上怎么办?
    2、所以我们就设置2个,也就是备胎,所以我设置比较灵活我可以是一个也可以是两个
    3、所以我再建一张表,直接不再和UserProfile关联而是和UserGroup关联
    4、这样我们一个人一个组,也可以多个组一个组

    2、代码

    class UserGroup(models.Model):
        """
        用户组
        ID   名称
         1   组A
         2   组B
         3   组C
        用户组和用户关系表
        组ID    用户ID
         1       1
         1       2
         2       2
         2       3
         3       4
        """
        name = models.CharField(max_length=32, unique=True)
        users = models.ManyToManyField('UserProfile')
    
        class Meta:
            verbose_name_plural = "用户组表"
    
        def __str__(self):
            return self.name
    

    7、资产标签表

    1、解决了什么问题

    1、如果服务器多的话,我可以给它打个标签
    2、就像我们写博客的时候可以打多个标签
    3、一台服务器可以打多个标签?和小米做了一次技术分享,他对每一台机器打多个标签
    4、以后查找的时候可以通过几个关键字能进行快速的查找

    2、代码

    class Tag(models.Model):
        """
        资产标签
        """
        name = models.CharField('标签', max_length=32, unique=True)
    
        class Meta:
            verbose_name_plural = "标签表"
    
        def __str__(self):
            return self.name	
    

    3、错误日志代码

    class ErrorLog(models.Model):
        """
        错误日志,如:agent采集数据错误 或 运行错误
        """
        server_obj = models.ForeignKey('Server', null=True, blank=True)
        title = models.CharField(max_length=16)
        content = models.TextField()
        create_at = models.DateTimeField(auto_now_add=True)
    
        class Meta:
            verbose_name_plural = "错误日志表"
    
        def __str__(self):
            return self.title
    

      

      

  • 相关阅读:
    Dom页面加载
    Redis
    Ubuntu下git的安装与使用
    类Xadmin插件--海豚插件
    Python基础指随笔
    前端必须掌握30个CSS3选择器
    SweetAlert插件示例
    Pylint在项目中的使用
    django Cookie、Session和自定义分页
    django创建超级用户
  • 原文地址:https://www.cnblogs.com/luoahong/p/9364593.html
Copyright © 2011-2022 走看看