CMDB开发之基础搭建

cmdb的介绍与需求

CMDB(配置管理数据库)存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。
上面是对cmdb系统的介绍,但是我们的cmdb项目要比定义当中的cmdb具有更加完备的功能
我们cmdb系统具备以下的功能:
1、 数据添加
2、 数据查询/搜索
3、 自动收集服务器信息
4、 服务器远程操作
5、 数据可视化展示
6、 监控数据接口提供
7、 权限控制
8、 数据导出
9、 生成CSV格式
所以说我们创建的cmdb系统是一个收集服务器基础信息,实现服务器信息可视化,为自动化运维数据监控、数据统计、提供数据基础的系统。
首先cmdb的对外的关联图:
在这里插入图片描述
然后我们再看一下cmdb系统结构图:
在这里插入图片描述

python cmdb数据库建模

我们首先通过Visio画个图来了解一下服务器CPU,服务器内存,服务器用户三个主题之间的关系:
在这里插入图片描述
服务器
服务器的基本信息

ip
mac
cpu
memory
disk
isalive

服务器cpu详细信息

processor	
vendor_id	
cpu_family	
model		
model_name	
stepping	 
microcode	
cpu_MHz		
cache_size	
physical_id	
siblings	
core_id		
cpu_cores
......

服务器内存的详细信息

MemTota
MemFree
MemAvailable
Buffers
Cached
SwapCached
Active
Inactive
Active(anon)
Inactive(anon)
Active(file)
......

用户
用户必要信息

uername
password

用户的选填信息

nickname
phone
email
photo

接口
接口信息

name
description
doc	(接口文档)

python cmdb前端基础搭建

首先我们的开发环境需要准备好:
Python 3.5
Django 1.8.2 : pip install django==1.8.2
Pillow : pip install pillow
Django-ckeditor:pip install django-ckeditor

  1. 创建项目
    跟之前创建个人博客一样的做法,进入到你选好的目录下,在此处打开cmd,开始创建项目。
    django-admin startproject ALLENCMDB

在这里插入图片描述
2. 创建app的目录

cd .\ALLENCMDB
python3 .\manage.py startapp server
python3 .\manage.py startapp User
python3 .\manage.py startapp Api

在这里插入图片描述
3. 创建静态文件目录
在这里插入图片描述
4. 保存静态文件
还是老样子,我们将模板文件中的静态文件和网页模板导入到项目中的静态文件夹。
这是我的项目所用到的模板
链接:https://pan.baidu.com/s/1vj0Lszgu_9GJFXe9Wm0AOg
提取码:avc0
在这里插入图片描述
在这里插入图片描述
5. 数据库orm的建模
在我们项目的models当中创建模型
在django当中数据建模分为两种
我们在\ALLENCMDB\Server\models.py中编写我们的数据表结构
1、中小型项目可以直接用django自带的外键和多对多关系进行数据关联

class CMDBUser(models.Model):
    	'''
    	cmdb系统用户信息
   	 一个用户可以对应多台服务器,一台服务器可以有多个用户
   	 所以他们之间是多对多关系
    	'''
    	username = models.CharField(max_length=32,verbose_name='用户账号')
    	password = models.CharField(max_length=32,verbose_name='用户密码')
    	nickname = models.CharField(max_length=32,verbose_name='用户姓名')
    	phone = models.CharField(max_length=32,verbose_name='用户手机号')
    	email = models.EmailField(verbose_name='用户邮箱')
    	photo = models.ImageField(verbose_name='用户头像',upload_to='images')
    	service = models.ManyToManyField(Server) #通过这个字段创建关联

2、在中大型项目由于开发需求多变,多数项目采用自定义表关系
这些表的定义,没有什么多说的,就是把你需要的信息作为关键字进行数据库建表,方便后期的信息录入,以下就是数据库建表的代码:

class Server(models.Model):
    	'''
   	 服务器基本信息
    	'''
    	ip = models.CharField(max_length=32,verbose_name='服务器ip')
    	mac = models.CharField(max_length=32,verbose_name='服务器物理地址')
    	cpu = models.CharField(max_length=32,verbose_name='服务器CPU')
    	memory = models.CharField(max_length=32,verbose_name='服务器内存')
    	disk = models.CharField(max_length=32,verbose_name='服务器磁盘')
   	 isalive = models.CharField(max_length=32,verbose_name='服务器状态')


class Cpu(models.Model):
    	'''
    	服务器CPU详细信息
    	'''
    	processor = models.CharField(max_length=32,blank=True,null=True)
   	 vendor_id = models.CharField(max_length=32,blank=True,null=True)
    	cpu_family = models.CharField(max_length=32,blank=True,null=True)
   	 model = models.CharField(max_length=32,blank=True,null=True)
    	model_name = models.CharField(max_length=32,blank=True,null=True)
   	 stepping = models.CharField(max_length=32,blank=True,null=True)
    	microcode = models.CharField(max_length=32,blank=True,null=True)
    	cpu_MHz = models.CharField(max_length=32,blank=True,null=True)
  


class Memory(models.Model):
       	 '''
       	 服务器内存详细信息
       	 '''
       	 MemTota = models.CharField(max_length=32,blank=True,null=True)
       	 MemFree = models.CharField(max_length=32,blank=True,null=True)
        	MemAvailable = models.CharField(max_length=32,blank=True,null=True)
        	Buffers = models.CharField(max_length=32,blank=True,null=True)
       	 Cached = models.CharField(max_length=32,blank=True,null=True)
        	SwapCached = models.CharField(max_length=32,blank=True,null=True)
       	 Active = models.CharField(max_length=32,blank=True,null=True)
        	Inactive = models.CharField(max_length=32,blank=True,null=True)
        	Active_anon = models.CharField(max_length=32,blank=True,null=True)
        	Inactive_anon = models.CharField(max_length=32,blank=True,null=True)
       	 Active_file = models.CharField(max_length=32,blank=True,null=True)
       	 Inactive_file = models.CharField(max_length=32,blank=True,null=True)
        	Unevictable = models.CharField(max_length=32,blank=True,null=True)
        	Mlocked = models.CharField(max_length=32,blank=True,null=True)
        	SwapTotal = models.CharField(max_length=32,blank=True,null=True)

class Server_Cpu(models.Model):
 '''
	服务器与CPU关联
	'''
	server_id = models.IntegerField()
	cpu_id = models.IntegerField()

class Server_memory(models.Model):
	'''
	服务器与内存关联
	'''
	server_id = models.IntegerField()
	memory_id = models.IntegerField()

我们两种结合
这里我们注意要导入富文本编辑器
from ckeditor_uploader.fields import RichTextUploadingField

class Api(models.Model):
     """
    	CMDB接口数据模型
   	 """
   	name = models.CharField(max_length = 32,verbose_name = "接口名称")
    description = RichTextUploadingField(verbose_name = "接口描述") #采用富文本编辑器编写的接口描述字段
    doc = models.CharField(max_length = 64,verbose_name = "接口文档")

3、 完成settings基本配置
Settings:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

这是Python1.6版本之后添加出来的配置,就是动态的指向项目根目录的一个配置
在这里插入图片描述
加载App
在这里插入图片描述
其中前三项是我们自定义的应用
后两项是ckeditor的应用
指定HTML文件存放目录
在这里插入图片描述
数据库配置,我们选择Python自带sqlite数据库,如果你需要其他数据库,按照要求配置连接。
在这里插入图片描述
语言与事件的配置
在这里插入图片描述
静态文件配置
在这里插入图片描述
大家经常出现的问题就是静态文件加载不对,表现没有前端样式
1、 请检测STATICFILES_DIRS是否正确,有没有加“S”
2、 请检测元组是不是加了逗号
媒体配置
在这里插入图片描述
App静态文件加载位置(注意这里需要在static目录下手动建立ckeditor,不然等会收集静态文件时会报错)
在这里插入图片描述
Ckeditor配置
在这里插入图片描述
配置ckeditor的路由
在这里插入图片描述
收集ckeditor的静态文件

python manage.py collectstatic

选择yes
在这里插入图片描述
在这里我们为了测试配置的效果,我们将我们的数据表安装到admin后台当中
在这里插入图片描述
然后同步数据库,同时启动项目
1、 校验配置

python manage.py validate

在这里插入图片描述
2、 生成数据库语句

python manage.py makemigrations
在这里插入图片描述
3、 进行数据库同步

 python manage.py syncdb

在这里插入图片描述
项目第一次同步在django1.4之后会询问是否创建后台超级用户
在这里插入图片描述
访问我们Django后台如图:
在这里插入图片描述
完成模板页
1、指出base页,这里是base.html
我将所有的模板文件放进一个文件夹以方便使用,然后新建一个base.html文件作为模板
在这里插入图片描述
视图文件
在这里插入图片描述
路由指出
在这里插入图片描述
现在我们打开页面是有问题的,没有加载样式
在这里插入图片描述
所以接下来我们需要修改其中的静态文件路径
在这里插入图片描述
然后我们再次访问,刷新页面后就正常啦。
在这里插入图片描述
进行模板设置
模板设置常用块儿
1、 标题块儿
要有默认值,如果标题没有写,也有要默认值
在这里插入图片描述
2、 样式块儿
目的是为了给各自页(继承页)添加自己的样式
在这里插入图片描述
3、 内容块儿
用来存放内容,可以分成多个块儿
比如当前
在这里插入图片描述
在这里插入图片描述
4、 js脚本块儿
js在HTML当中有先后顺序,后加载的可以导入先加载的,比如vue.js依赖jq,所以我们写导入先导入jq,再导入vue.js
还有部分js写在我们HTML页面的标签当中,那么这个没有顺序,这个执行顺序依赖js代码编写
在这里插入图片描述
2、 进行模板加载
代码在此:
index.html

{% extends "base.html" %} <!-- 这个标签的参数需要加引号 -->

{% block title %}
    ALLEN CMDB系统-首页
{% endblock %}

{% block label %}
    ALLEN CMDB系统-首页
{% endblock %}

{% block content %}
    这是我的首页
{% endblock %}

{% block script %} <!-- 这个做出一个弹出的测试框 -->
    <script>
        $(
             function () {
                 alert("hello world")
             }
        )
    </script>
{% endblock %}

\ALLENCMDB\ALLENCMDB\views.py

#coding:utf-8
from django.shortcuts import render_to_response


def index(request):
    return render_to_response("index.html")

路由指出
在这里插入图片描述
效果如下:
在这里插入图片描述
当然你可以进一步去更改自己的首页风格,我很期待你的作品哦!

猜你喜欢

转载自blog.csdn.net/ALLENsakaru/article/details/84574068