学神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系统具备以下的功能:
- 数据添加
- 数据查询/搜索
- 自动收集服务器信息
- 服务器远程操作
- 数据可视化展示
- 监控数据接口提供
- 权限控制
- 数据导出
- 生成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
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、创建项目
- 在pycharm上设置远程在centos环境上建立django项目
- 创建app目录
cd XueGodCMDB
python manage.py startapp Service
python manage.py startapp Users
python manage.py startapp Api
3、创建静态文件目录
4、保存静态文件
5、进行数据库orm建模
在我们项目的models当中创建模型
在django当中数据建模分为两种
- 中小型项目可以直接用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环境,并创建好红框标注的数据库)
语言与事件的配置
静态文件和媒体文件配置
大家经常出现的问题就是静态文件加载不是,表现没有前端样式
- 请检测STATICFILES_DIRS是否正确
- 请检测元组是不是加了逗号
App静态文件加载位置、Ckeditor配置
配置ckeditor的路由
收集ckeditor的静态文件
python manage.py collectstatic
选择yes
在这里我们为了测试配置的效果,我们将我们的数据表安装到admin后台当中
然后同步数据库,同时启动项目
- 校验配置
- 进行数据库同步
查看效果:
完成静态页面样式,尽量完成静态页
- 完成模板页
1、指出base页,这里是blank.html
视图文件
url路由指出
现在出现页面,没有静态文件显示
判断样式路径有问题,开始修改路径
修改之后得到效果
在进行HTML修改的过程当中学会结合浏览器的f12和编译器的代码折叠
样式修改完成
进行模板设置
模板设置常用块儿
- 标题块儿 要有默认值,如果标题没有写,也有默认值
<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_介绍,项目开始相关推荐
- python全栈学习笔记(一)网络基础之网络协议篇
阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...
- python全栈学习笔记
先说说那么多编程语言为什么学习python,1,"万能"容易 2,"不容易秃",哈哈哈! 定义变量 python的变量创建赋值三个部分 标识符 赋值符 值 py ...
- Python全栈学习笔记day 40.5+:线程池和线程池的Python标准模块--concurrent.futures
Python标准模块--concurrent.futures 源码:https://docs.python.org/dev/library/concurrent.futures.html #1 介绍: ...
- python全栈学习路线
人工智能时代,想要从事编程行业,最佳的学习语言是什么?当然是Python!Python入门简单.功能强大,已成为各大企业首选开发语言,也吸引了无数有志学子投身学习.下面是小编为您整理的关于python ...
- python全栈要学什么_python全栈要学什么 python全栈学习路线
IT行业,技术要比学历.年龄.从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础.Python web开发.Python爬虫.Python数据分析这 ...
- (零基础)入门python学习四步骤,附上Python全栈学习路线大刚!
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:python学习教程 ( 想要学习Python?Pyt ...
- 流弊!《Python全栈学习手册》开放下载了
本次给大家分享一个质量非常高的<Python全栈学习手册>. 这份资料非常全面,从 Python 基础.到 web 开发.数据分析.机器学习.深度学习.金融量化统统 都有,该手册是 HTM ...
- Python全栈工程师特训班-第一期直播回放-韦玮-专题视频课程
Python全栈工程师特训班-第一期直播回放-643人已学习 课程介绍 Python全栈工程师特训班-直播回放全集 课程收益 Python全栈工程师特训营-直播回放全集 讲师介 ...
- 李艺《微信小程序全栈开发实战》(第一章)
李艺<微信小程序全栈开发实战>(第一章) 双线程运行机制 小程序的特点及开发能力 小程序的特点 小程序的开发能力 开发小程序的一般流程 小程序的运行机制 小程序双线程 视图的持续更新是如何 ...
最新文章
- 【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
- 利用反射机制获取未知类型的枚举的信息
- 无惧秋招,您的NLP算法工程师魔鬼训练计划请查收
- pandas之表格样式
- 【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)
- 安装“消息队列 (MSMQ)”
- OceanBase时序数据库CeresDB正式商用 为用户提供安全可靠的数据存储管理服务
- 电池图标不见了怎么解决
- matplotlib画图_Python数据可视化工具Matplotlib之画图(四)(饼状图)
- Redis Nosql数据库
- C# 后台服务器端 Get 请求函数封装
- 海量数据插入数据库的快速方案
- 图书管理系统实验报告-面向对象的分析与设计
- 工控机在机器视觉系统中的应用
- C++编程笔记(QT)
- cmd命令查询电脑序列号_查看电脑序列号_查看电脑序列号命令
- 高效能人士的七个习惯-第四章-阅读
- 如何用Photoshop来磨皮人脸图
- mysql定时任务自动备份
- 服务器响应程序,封装高可复用的服务端响应SSC程序修复对象 --ServerResponse