学神python全栈学习笔记CMDB系统---第一章 python_cmdb_介绍,项目开始

第一章 python_cmdb_介绍,项目开始

本节所讲内容:

1.1  python cmdb系统介绍与需求分析

1.2  python cmdb数据库建模

1.3  python cmdb前端基础搭建

1.1  python cmdb系统介绍与需求分析

CMDB(配置管理数据库)存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。

上面是对cmdb系统的介绍,但是我们的cmdb项目要比定义当中的cmdb具有更加完备的功能

我们cmdb系统具备以下的功能:

  1. 数据添加
  2. 数据查询/搜索
  3. 自动收集服务器信息
  4. 服务器远程操作
  5. 数据可视化展示
  6. 监控数据接口提供
  7. 权限控制
  8. 数据导出
  9. 生成CSV格式,

所以说我们创建的cmdb系统是一个收集服务器基础信息,实现服务器信息可视化,为自动化运维数据监控、数据统计、提供数据基础的系统

首先cmdb的对外的关联图

 

然后我们看一下cmdb系统结构图

1.2  python cmdb数据库建模

通过navicat建模

 

建表

 

服务器

基本服务器信息

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 :

apicid

initial_apicid

fpu

fpu_exception

cpuid_level

wp

flags

bogomips

clflush_size

cache_alignment

address_sizes

power_management

服务器内存详细信息

MemTota

MemFree

MemAvailable

Buffers

Cached

SwapCached

Active

Inactive

Active(anon)

Inactive(anon)

Active(file)

Inactive(file)

Unevictable

Mlocked

SwapTotal

SwapFree

Dirty

Writeback

AnonPages

Mapped

Shmem

Slab

SReclaimable

SUnreclaim

KernelStack

PageTables

NFS_Unstable

Bounce

WritebackTmp

CommitLimit

Committed_AS

VmallocTotal

VmallocUsed

VmallocChunk

HardwareCorrupted

AnonHugePages

HugePages_Total

HugePages_Free

HugePages_Rsvd

HugePages_Surp

Hugepagesize

DirectMap4k

DirectMap2M

DirectMap1G

用户

用户必要信息

Username

Password

用户选填信息

Nickname

Phone

Email

photo

接口

接口信息

Name

Description

Doc  给链接

1.3  python cmdb前端基础搭建

检查centos的python,切换到3.6上

[root@network_server_test .ssh]# rm -rf /usr/bin/python 
[root@network_server_test .ssh]# ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python
[root@network_server_test .ssh]# 
[root@network_server_test .ssh]# 
[root@network_server_test .ssh]# python
Python 3.6.2 (default, Sep 16 2017, 19:38:07) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
[3]+  Stopped                 python
[root@network_server_test .ssh]# 
[root@network_server_test .ssh]# 
[root@network_server_test .ssh]# 
[root@network_server_test .ssh]# 
[root@network_server_test .ssh]# pip -V
pip 10.0.1 from /usr/local/python3.6/lib/python3.6/site-packages/pip (python 3.6)

[root@network_server_test .ssh]# pip install django==1.11.1                              安装指定版本的django
[root@network_server_test .ssh]# pip install Pillow                                             安装指定版本的Pillow         
Requirement already satisfied: Pillow in /usr/local/python3.6/lib/python3.6/site-packages (5.2.0)
[root@network_server_test .ssh]# pip install django-ckeditor==5.3.0                  安装指定版本的django-ckeditor


1、创建项目

  1. 在pycharm上设置远程在centos环境上建立django项目
  2. 创建app目录

cd XueGodCMDB

python manage.py startapp Service

python manage.py startapp Users

python manage.py startapp Api

3、创建静态文件目录

4、保存静态文件

5、进行数据库orm建模

在我们项目的models当中创建模型

在django当中数据建模分为两种

  1. 中小型项目可以直接用django自带的外键和多对多关系进行数据关联

 

2、在中大型项目由于开发需求多变,多数项目采用自定义表关系

class Service(models.Model):
    '''
    服务器基本信息
    '''
    ip = models.CharField(max_length=64, verbose_name='服务器ip地址')
    mac = models.CharField(max_length=64, verbose_name='服务器mac地址')
    cpu = models.CharField(max_length=64, verbose_name='服务器cpu')
    memory = models.CharField(max_length=64, verbose_name='服务器内存')
    disk = models.CharField(max_length=64, verbose_name='服务器磁盘')
    hostname = models.CharField(max_length=64, verbose_name='服务器名称', null=True)
    isalive = models.CharField(max_length=64, verbose_name='服务器状态')

    class Meta:
        db_table = '服务器基本信息表'
        verbose_name = '服务器基本信息'
        verbose_name_plural = verbose_name


class Cpu(models.Model):
    '''
    服务器cpu详细信息
    null用于数字和日期类型为空
    blank用于字符类型为空
    '''
    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=48, 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)
    cache_size = models.CharField(max_length=32, blank=True, null=True)
    physical_id = models.CharField(max_length=32, blank=True, null=True)
    siblings = models.CharField(max_length=32, blank=True, null=True)
    core_id = models.CharField(max_length=32, blank=True, null=True)
    cpu_cores = models.CharField(max_length=32, blank=True, null=True)
    apicid = models.CharField(max_length=32, blank=True, null=True)
    initial_apicid = models.CharField(max_length=32, blank=True, null=True)
    fpu = models.CharField(max_length=32, blank=True, null=True)
    fpu_exception = models.CharField(max_length=32, blank=True, null=True)
    cpuid_level = models.CharField(max_length=32, blank=True, null=True)
    wp = models.CharField(max_length=32, blank=True, null=True)
    flags = models.CharField(max_length=256, blank=True, null=True)
    bogomips = models.CharField(max_length=32, blank=True, null=True)
    clflush_size = models.CharField(max_length=32, blank=True, null=True)
    cache_alignment = models.CharField(max_length=32, blank=True, null=True)
    address_sizes = models.CharField(max_length=48, blank=True, null=True)
    power_management = models.CharField(max_length=32, blank=True, null=True)

    class Meta:
        db_table = '服务器CPU详细信息表'
        verbose_name = '服务器CPU详细信息'
        verbose_name_plural = verbose_name


class Memory(models.Model):
    '''
    服务器内存详细信息
    '''
    MemTotal = 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)
    SwapFree = models.CharField(max_length=32, blank=True, null=True)
    Dirty = models.CharField(max_length=32, blank=True, null=True)
    Writeback = models.CharField(max_length=32, blank=True, null=True)
    AnonPages = models.CharField(max_length=32, blank=True, null=True)
    Mapped = models.CharField(max_length=32, blank=True, null=True)
    Shmem = models.CharField(max_length=32, blank=True, null=True)
    Slab = models.CharField(max_length=32, blank=True, null=True)
    SReclaimable = models.CharField(max_length=32, blank=True, null=True)
    SUnreclaim = models.CharField(max_length=32, blank=True, null=True)
    KernelStack = models.CharField(max_length=32, blank=True, null=True)
    PageTables = models.CharField(max_length=32, blank=True, null=True)
    NFS_Unstable = models.CharField(max_length=32, blank=True, null=True)
    Bounce = models.CharField(max_length=32, blank=True, null=True)
    WritebackTmp = models.CharField(max_length=32, blank=True, null=True)
    CommitLimit = models.CharField(max_length=32, blank=True, null=True)
    Committed_AS = models.CharField(max_length=32, blank=True, null=True)
    VmallocTotal = models.CharField(max_length=32, blank=True, null=True)
    VmallocUsed = models.CharField(max_length=32, blank=True, null=True)
    VmallocChunk = models.CharField(max_length=32, blank=True, null=True)
    HardwareCorrupted = models.CharField(max_length=32, blank=True, null=True)
    AnonHugePages = models.CharField(max_length=32, blank=True, null=True)
    HugePages_Total = models.CharField(max_length=32, blank=True, null=True)
    HugePages_Free = models.CharField(max_length=32, blank=True, null=True)
    HugePages_Rsvd = models.CharField(max_length=32, blank=True, null=True)
    HugePages_Surp = models.CharField(max_length=32, blank=True, null=True)
    Hugepagesize = models.CharField(max_length=32, blank=True, null=True)
    DirectMap4k = models.CharField(max_length=32, blank=True, null=True)
    DirectMap2M = models.CharField(max_length=32, blank=True, null=True)
    DirectMap1G = models.CharField(max_length=32, blank=True, null=True)

    class Meta:
        db_table = '服务器内存详细信息表'
        verbose_name = '服务器内存详细信息'
        verbose_name_plural = verbose_name


class Service_Cpu(models.Model):
    '''
    服务器cpu关联表
    '''
    service_id = models.IntegerField()
    cpu_id = models.IntegerField()

    class Meta:
        db_table = '服务器cpu关联表'
        verbose_name = '服务器cpu关联'
        verbose_name_plural = verbose_name


class Service_Memory(models.Model):
    '''
    服务器内存关联表
    '''
    service_id = models.IntegerField()
    memory_id = models.IntegerField()

    class Meta:
        db_table = '服务器内存关联表'
        verbose_name = '服务器内存关联'
        verbose_name_plural = verbose_name

 我们两种结合

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='接口文档')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'CMDB接口数据模型'
        verbose_name_plural = verbose_name
        db_table = 'CMDB Api接口数据表'

常识:

State: 比较常用,各种状态都可以用它,但是它更着重于一种心理状态或者物理状态。

Status: 用在人的身上一般是其身份和地位,作“状态,情形”讲时,多指政治和商业。

          我们可以把 State 作为表名,里面含有各种状态,代表着本身(自己)是一个集合。

而 Status 作为字段名,里面也含有各种状态,但代表的是主体(其他东西)的状态。

6、完成settings基本配置

Settings:

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

这是Python1.6版本之后添加出来的配置,就是动态的指向项目根目录的一个配置

 

加载App

其中前三项是我们自定义的应用

后两项是ckeditor的应用

指定HTML文件存放目录

数据库配置(远程centos环境上需要提前安装好mysql环境,并创建好红框标注的数据库)

 语言与事件的配置

静态文件和媒体文件配置

 

大家经常出现的问题就是静态文件加载不是,表现没有前端样式

  1. 请检测STATICFILES_DIRS是否正确
  2. 请检测元组是不是加了逗号

App静态文件加载位置、Ckeditor配置

配置ckeditor的路由

 

收集ckeditor的静态文件

python manage.py collectstatic

选择yes

 

在这里我们为了测试配置的效果,我们将我们的数据表安装到admin后台当中 

 

然后同步数据库,同时启动项目

  1. 校验配置

 

  1. 进行数据库同步

 

 查看效果:

完成静态页面样式,尽量完成静态页

  1. 完成模板页

1、指出base页,这里是blank.html

视图文件

 

url路由指出

 

现在出现页面,没有静态文件显示

判断样式路径有问题,开始修改路径

修改之后得到效果

在进行HTML修改的过程当中学会结合浏览器的f12和编译器的代码折叠

样式修改完成

进行模板设置

模板设置常用块儿

  1. 标题块儿 要有默认值,如果标题没有写,也有默认值

<title>
     {% block title %}
     学神CMDB管理系统
     {% endblock %}
</title>

 样式块儿    目的是为了给各自页(继承页)添加自己的样式

内容块儿 用来存放内容,可以分成多个块儿

比如当前

<div id="page-wrapper">
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-12">
                <h1 class="page-header">
                    {% block label %}
                        Blank
                    {% endblock %}
                </h1>
            </div>
            <!-- /.col-lg-12 -->
        </div>
        <!-- /.row -->
        {% block content %}
        {% endblock %}
    </div>
    <!-- /.container-fluid -->
</div>

js脚本块儿

js在HTML当中拥有先后顺序,后加载的可以导入先加载的,比如vue.js依赖jq,所以我们写导入先导入jq,再导入vue.js

还有部分js写在我们HTML页面的<scripts>标签当中,那么这个没有顺序,这个执行顺序依赖js代码编写

{% block script %}
{% endblock %}

进行模板加载,代码在此:

XueGodCMDB/template/index.html

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

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

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

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

{% block script %}
    <script>
        $(
             function () {
                 alert("hello world")
             }
        )
    </script>
{% endblock %}

XueGodCMDB/ XueGodCMDB /view.py

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


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

XueGodCMDB/ XueGodCMDB /urls.py

from XueGodCMDB.views import index
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^ckeditor/', include("ckeditor_uploader.urls")),
    url(r'^index/', index),
]

效果如下:

总结

1.1  python cmdb系统介绍与需求分析

1.2  python cmdb数据库建模

1.3  python cmdb前端基础搭建

 

猜你喜欢

转载自blog.csdn.net/weixin_35264169/article/details/82050618