第一章 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_nameclass 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_nameclass 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_nameclass 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_nameclass 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.nameclass Meta:verbose_name = 'CMDB接口数据模型'verbose_name_plural = verbose_namedb_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前端基础搭建

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

  1. python全栈学习笔记(一)网络基础之网络协议篇

    阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...

  2. python全栈学习笔记

    先说说那么多编程语言为什么学习python,1,"万能"容易 2,"不容易秃",哈哈哈! 定义变量 python的变量创建赋值三个部分 标识符 赋值符 值 py ...

  3. Python全栈学习笔记day 40.5+:线程池和线程池的Python标准模块--concurrent.futures

    Python标准模块--concurrent.futures 源码:https://docs.python.org/dev/library/concurrent.futures.html #1 介绍: ...

  4. python全栈学习路线

    人工智能时代,想要从事编程行业,最佳的学习语言是什么?当然是Python!Python入门简单.功能强大,已成为各大企业首选开发语言,也吸引了无数有志学子投身学习.下面是小编为您整理的关于python ...

  5. python全栈要学什么_python全栈要学什么 python全栈学习路线

    IT行业,技术要比学历.年龄.从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础.Python web开发.Python爬虫.Python数据分析这 ...

  6. (零基础)入门python学习四步骤,附上Python全栈学习路线大刚!

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:python学习教程 ( 想要学习Python?Pyt ...

  7. 流弊!《Python全栈学习手册》开放下载了

    本次给大家分享一个质量非常高的<Python全栈学习手册>. 这份资料非常全面,从 Python 基础.到 web 开发.数据分析.机器学习.深度学习.金融量化统统 都有,该手册是 HTM ...

  8. Python全栈工程师特训班-第一期直播回放-韦玮-专题视频课程

    Python全栈工程师特训班-第一期直播回放-643人已学习 课程介绍         Python全栈工程师特训班-直播回放全集 课程收益     Python全栈工程师特训营-直播回放全集 讲师介 ...

  9. 李艺《微信小程序全栈开发实战》(第一章)

    李艺<微信小程序全栈开发实战>(第一章) 双线程运行机制 小程序的特点及开发能力 小程序的特点 小程序的开发能力 开发小程序的一般流程 小程序的运行机制 小程序双线程 视图的持续更新是如何 ...

最新文章

  1. 【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
  2. 利用反射机制获取未知类型的枚举的信息
  3. 无惧秋招,您的NLP算法工程师魔鬼训练计划请查收
  4. pandas之表格样式
  5. 【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)
  6. 安装“消息队列 (MSMQ)”
  7. OceanBase时序数据库CeresDB正式商用 为用户提供安全可靠的数据存储管理服务
  8. 电池图标不见了怎么解决
  9. matplotlib画图_Python数据可视化工具Matplotlib之画图(四)(饼状图)
  10. Redis Nosql数据库
  11. C# 后台服务器端 Get 请求函数封装
  12. 海量数据插入数据库的快速方案
  13. 图书管理系统实验报告-面向对象的分析与设计
  14. 工控机在机器视觉系统中的应用
  15. C++编程笔记(QT)
  16. cmd命令查询电脑序列号_查看电脑序列号_查看电脑序列号命令
  17. 高效能人士的七个习惯-第四章-阅读
  18. 如何用Photoshop来磨皮人脸图
  19. mysql定时任务自动备份
  20. 服务器响应程序,封装高可复用的服务端响应SSC程序修复对象 --ServerResponse

热门文章

  1. RTX2060和GTX1080ti 哪个好
  2. 计算机网络——会话层、表示层、应用层
  3. 11th 自定义msg的使用之消息发布方(C++)
  4. 网络探针功能介绍 BTA IntraSec系统(转载)
  5. 分布式学习笔记---分布式系统的回顾与简介
  6. 离开家乡的人,习惯在外的漂泊,回不去了!
  7. Android实现双击事件的监听
  8. openshift/origin学习记录(12)——离线安装集群
  9. python 爬虫之URLlib的编码和解码
  10. android获取指定号码的短信,如何接收特定号码的短信信息?