|
|
|
|
移动端

2.5.4 Django的配置(2)

《运维前线:一线运维专家的运维方法、技巧与实践》第2章利用Facter和Django快速构建CMDB,本章将会详细讲解,如何利用开源软件Facter和Django快速构建一个小型的CMDB系统。界面与功能不算复杂,这也是它轻量的体现,本章更多的是提供一种思路,以达到抛砖引玉的作用,仅供大家参考。本节为大家介绍Django的配置。

作者:云技术社区来源:机械工业出版社|2017-04-23 12:36

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


2.5.4 Django的配置(2)

5.数据表设计

Django遵循MVC设计,其中M(模型)就是数据库模型,也就是App中的models.py文件的设置,Django自带数据库的ORM(Object Relational Mapping)架构,这使得我们不用再需要学习复杂的数据库操作,只需要通过定义models即可。下面是我设置的最简单的CMDB数据结构:

  1. # 指定解析器为Python  
  2. # !/usr/bin/env python  
  3. # 指定字符编码为utf8  
  4. # encoding:utf8  
  5. # 从django.db中导入models模块  
  6. from django.db import models  
  7. # 导入User模块  
  8. from django.contrib.auth.models import User  
  9. # Create your models here.  
  10. # 定义一个Server_Group类,从models.Model中继承,这里就是所谓的数据表结构  
  11. class Server_Group(models.Model):  
  12.     # 定义主机组名称字段  
  13.     name = models.CharField(u'主机组', max_length=255unique=True)  
  14.     # 关联的项目字段,这里是关联一个外键  
  15.     project = models.ForeignKey("Project", verbose_name='项目名称')  
  16.     # 备注字段  
  17.     memo = models.CharField(u'备注', max_length=255blank=True)  
  18.     # unicode返回值  
  19.     def __unicode__(self):  
  20.         # 返回的格式  
  21.         return '%s-%s' % (self.project.name, self.name)  
  22.  
  23.     # 定义Meta属性  
  24.     class Meta:  
  25.         # 数据库中的表名  
  26.         db_table = 'server_group' 
  27.         # 存储的时候需要确认组合键是唯一的  
  28.         unique_together = (("name", "project"),)  
  29.  
  30. # 定义一个IDC类,主要存储IDC信息,数据表结构有2个字段  
  31. class IDC(models.Model):  
  32.     # 定义IDC的名称字段  
  33.     name = models.CharField(u'IDC名称', max_length=255unique=True)  
  34.     memo = models.CharField(u'备注', max_length=255blank=True)  
  35.  
  36.     def __unicode__(self):  
  37.         return self.name  
  38.  
  39.     class Meta:  
  40.         db_table = 'idc' 
  41.  
  42. # 定义一个Project类,主要存储项目信息,数据表结构有2个字段  
  43. class Project(models.Model):  
  44.     name = models.CharField(u'项目名称', max_length=255unique=True)  
  45.     memo = models.CharField(u'备注', max_length=255blank=True)  
  46.  
  47.     def __unicode__(self):  
  48.         return self.name  
  49.  
  50.     class Meta:  
  51.         db_table = 'project' 
  52.  
  53. # 定义一个Server_Role类,主要存储服务器角色信息,数据表结构有3个字段  
  54. class Server_Role(models.Model):  
  55.     name = models.CharField(u'角色', max_length=255)  
  56.     # 关联Server_Group,也就是服务器组  
  57.     group = models.ForeignKey("Server_Group", verbose_name='项目组')  
  58.     memo = models.CharField(u'备注', max_length=255blank=True)  
  59.  
  60.     def __unicode__(self):  
  61.         return '%s-%s-%s' % (self.group.project.name, self.group.name, self.name)  
  62.  
  63.     class Meta:  
  64.         # 设置数据库表名  
  65.         db_table = 'server_role' 
  66.         # 存储的时候需要确认组合键是唯一的  
  67.         unique_together = (("name", "group"),)  
  68.  
  69.  
  70. # CMDB核心数据表结构,用来存储服务器系统信息  
  71. class Server_Device(models.Model):  
  72.     # 服务器状态选择,具体的字段存储数据为0~3的int数字  
  73.     SERVER_STATUS = (  
  74.         (0, u'下线'),  
  75.         (1, u'在线'),  
  76.         (2, u'待上线'),  
  77.         (3, u'测试'),  
  78.     )  
  79.     # 定义一个名称字段,若blank没有设置则默认为False,不能为空,且unique=True必须唯一  
  80.     name = models.CharField(u'主机名称', max_length=100unique=True)  
  81.     # 定义SN编号字段, blank=True,可以为空  
  82.     sn = models.CharField(u'SN号', max_length=200blank=True)  
  83.     # 公网IP字段,可以为空  
  84.     public_ip = models.CharField(u'外网IP', max_length=200blank=True)  
  85.     # 私网IP字段,可以为空  
  86.     private_ip = models.CharField(u'内网IP', max_length=200blank=True)  
  87.     # 定义MAC地址字段  
  88.     mac = models.CharField(u'MAC地址', max_length=200blank=True)  
  89.     # 定义操作系统字段  
  90.     os = models.CharField(u'操作系统', max_length=200blank=True)  
  91.    # 定义磁盘信息字段  
  92.     disk = models.CharField(u'磁盘', max_length=200blank=True)  
  93.     # 定义内存信息字段  
  94.     mem = models.CharField(u'内存', max_length=200blank=True)  
  95.     # 定义CPU信息字段  
  96.     cpu = models.CharField(u'CPU', max_length=200blank=True)  
  97.     # 关联IDC信息  
  98.     idc = models.ForeignKey(IDC, max_length=255blank=Truenull=True, verbose_  
  99.     name='机房名称')  
  100.     # 定义一个多对多字段,一台服务器可以对应多个角色  
  101.     role = models.ManyToManyField("Server_Role", verbose_name='角色'blank=True)  
  102.     # 机器状态,默认都为在线状态  
  103.     status = models.SmallIntegerField(verbose_name='机器状态'choices=SERVER_STATUS,  
  104.     default=1)  
  105.     # 管理用户信息  
  106.     admin = models.ForeignKey('auth.User', verbose_name='管理员'null=Trueblank=True)  
  107.     # 定义备注字段  
  108.     memo = models.CharField(u'备注', max_length=200blank=True)  
  109.  
  110.     def __unicode__(self):  
  111.         return self.name  
  112.  
  113.     class Meta:  
  114.         db_table = 'server_device' 

初始化数据库,同时设置登录所需要的username和password,命令如下:

  1. $ python manage.py syncdb  
  2. Operations to perform:  
  3. Apply all migrations: admin, contenttypes, auth, sessions  
  4. Running migrations:  
  5. Applying contenttypes.0001_initial... OK  
  6. Applying auth.0001_initial... OK  
  7. Applying admin.0001_initial... OK  
  8. Applying sessions.0001_initial... OK  
  9. You have installed Django's auth system, and don't have any superusers defined.  
  10. Would you like to create one now? (yes/no): yes  
  11. # 这里输入用户名  
  12. Username (leave blank to use 'root'): admin  
  13. Email address:  
  14. # 这里输入密码  
  15. Password:  
  16. # 重复输入密码  
  17. Password (again):  
  18. Superuser created successfully. 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

游戏开发核心技术--剧本和角色创造

《游戏开发核心技术--剧本和角色创造》分“剧本”、“角色”和“游戏玩法”三部分,第一部分着重说明故事的历史、一般故事元素、传统故事设...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊