note

一、CMDB
-采集资产
-API
-后台管理
-资产列表(CURD)
-业务线列表(CURD)
-用户列表(CURD)
-组列表(CURD)
...
===>简单<===
公共组件:删改查
查:
资产列表(CURD)
config=[
{
"q":"id",
},{
"q":"name",
}]
values_list=["id","name"]
result=model.TB.objects.filter(条件).values(*values_list)
#[{},{},{}] 具体列
===>标配:配置+数据操作
二、算法

models

 from django.db import models
# Create your models here.
class UserInfo(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField()
class BusinessUnit(models.Model):
name = models.CharField(max_length=32)
class Server(models.Model):
server_type_choices=(
(1,"WEB"),
(2,"存储"),
(3,"缓存"),
)
server_type=models.IntegerField(choices=server_type_choices)
hostname=models.CharField(max_length=32)
port=models.IntegerField()
business_unit=models.ForeignKey('BusinessUnit',on_delete=models.CASCADE)
user=models.ForeignKey('UserInfo',on_delete=models.CASCADE)
views

 from django.shortcuts import render
from django.views import View
from django.shortcuts import HttpResponse
from django.views import View
from app01 import models
import json
# Create your views here.
class BaseResponse(object):
def __init__(self):
self.status=True
self.data=None
self.message=None
class ServerView(View):
def get(self,request,*args,**kwargs):
return render(request,'server.html')
class ServerJsonView(View):
def get(self,request,*args,**kwargs):
response=BaseResponse()
try:
# 获取要显示的列
# 获取数据
table_config=[{
'q':'id',
'title': '主机名',
'display':0,
'text':{},
'attr':{}
},{
'q':'hostname',
'title':'主机名',
'display':1,
'text':{'content':'{m}','kwargs':{'m':'@hostname'}},
'attr': {'k1':'@hostname','k2':'v2'}
},# '{n}-{m}'.format({'n':'@hostname','m':'@hostname'}) =>hostname-c1.com
{
'q':'port',
'title': '端口',
'display': 1,
'text': {'content':'{m}', 'kwargs': { 'm': '@port'}},
'attr': {'k1': '@port', 'k2': 'v2'}
},{
'q':'business_unit_id',
'title': '业务线ID',
'display': 1,
#去全局变量business_unit_list=[
# {id:1,name:'WEB'},
# {id:2,name:'存储'},
# {id:1,name:'商城'},]
'text': {'content': '{m}', 'kwargs': { 'm': '@@business_unit_list'}},
'attr': {'k1': '@business_unit_id', 'k2': 'v2'}
},{
'q':'business_unit__name',
'title': '业务线名称',
'display': 1,
'text': {'content': '{key}-{m}', 'kwargs': { 'key':'@business_unit_id','m': '@business_unit__name'}},
'attr': {'k1': '@business_unit__name', 'k2': 'v2'}
},{
'q':None,
'title': '操作',
'display': 1,
'text': {'content': '<a herf="server-detail-{n}.html">查看详细</a>', 'm': '@id'},
'attr': {'k1': '@id', 'k2': 'v2'}
},]
values_list=[]
for item in table_config:
if item['q']:
values_list.append(item['q'])
data_list=models.Server.objects.values(*values_list)
#[{},{}]
data_list=list(data_list)
print(data_list)
response.data={
'table_config': table_config,
'data_list':data_list,
}
except Exception as e:
response.status=False
response.message=str(e)
return HttpResponse(json.dumps(response.__dict__))
class BusinessView(View):
def get(self,request,*args,**kwargs):
return render(request,'business.html')
class BusinessJsonView(View):
def get(self,request,*args,**kwargs):
response=BaseResponse()
try:
# 获取要显示的列
# 获取数据
table_config=[{
'q':'id',
'title':'ID',
'display':1,
},{
'q':'name',
'title': '业务线名称',
'display': 1,
},{
'q':None,
'title': '操作',
'display': 1,
},]
values_list=[]
for item in table_config:
if item['q']:
values_list.append(item['q'])
data_list=models.BusinessUnit.objects.values(*values_list)
#[{},{}]
data_list=list(data_list)
print(data_list)
response.data={
'table_config': table_config,
'data_list':data_list,
}
except Exception as e:
response.status=False
response.message=str(e)
return HttpResponse(json.dumps(response.__dict__))
urls

 from django.contrib import admin
#from django.urls import path
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^server.html',views.ServerView.as_view()),
url(r'^server-json.html',views.ServerJsonView.as_view()),
url(r'^business.html', views.BusinessView.as_view()),
url(r'^business-json.html', views.BusinessJsonView.as_view()),
]
nb-list

 (function (jq) {
var requestURL;
//为字符串创建format方法,用于字符串格式化
String.prototype.format=function(args){
return this.replace(/\{(\w+)\}/g,function(s,i){
return args[i];
});
};
function init() {
//获取要显示的列
//获取数据
$.ajax({
url:requestURL,
type:'GET',
dataType:'JSON',
success:function (arg) {
if(arg.status){
//创建表格标题
createTablehead(arg.data.table_config);
/*
[{'hostname': 'c1.com', 'port': 11}, {'hostname': 'c2.com', 'port': 23}]
*/
createTablebody(arg.data.table_config,arg.data.data_list);
}else{
alert(arg.message)
}
}
})
}
function createTablehead(config){
/*
tr
td
td
tr
[{
'title':'主机名',
'display':0,
},{
'title': '端口',
'display': 1,
}] */
var tr = document.createElement('tr')
$.each(config,function(k,v){
if(v.display){
var th = document.createElement('th')
th.innerHTML=v.title;
$(tr).append(th);
}
});
$('#thead').append(tr);
}
function createTablebody(tableConfig,dataList){
/*
,dataList=[{'hostname': 'c1.com', 'port': 11}, {'hostname': 'c2.com', 'port': 23}]
tableConfig=[{
'q':'hostname',
'title':'主机名',
'display':1,
},{
'q':'port',
'title': '端口',
'display': 1,
},{
'q':None,
'title': '操作',
'display': 1,
}]*/
$.each(dataList,function (k1,row) {
//row={'port':11,'hostname':'c1.com'}
//row={'port':22,'hostname':'c2.com'}
var tr=document.createElement('tr');
$.each(tableConfig,function (k2,configItem) {
if(configItem.display){
/*configItem={
'q':'hostname',
'title':'主机名',
'display':1,},
'text': {'content': '<a herf="server-detail-{n}.html">查看详细</a>', 'm': '@id'}
'attr':{}, */
var td =document.createElement('td');
//td.innerHTML=row[configItem.q];
//configItem.text.content
var kwargs={};
$.each(configItem.text.kwargs,function (key,value) {
if(value.startsWith("@")){
var temp=value.substring(1,value.length);
kwargs[key]=row[temp]
}else{
kwargs[key]=value;
}
});
td.innerHTML=configItem.text.content.format(kwargs);
$.each(configItem.attr,function (key,value) {
if(value.startsWith("@")){
var temp=value.substring(1,value.length);
td.setAttribute(key,row[temp]);
}else{
td.setAttribute(key,value);
}
});
$(tr).append(td);
}});
$('#tbody').append(tr);
})}
jq.extend({
'linan': function (url) {
requestURL=url
init();
}
})
})(jQuery);
business

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<table border="1">
<thead id="thead"></thead>
<tr>
</tr>
<tbody id="tbody"></tbody>
</table>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/nb-list.js"></script>
<script>
$(function () {
$.linan('/business-json.html');
});
</script>
</body>
</html>
server

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<table border="1">
<thead id="thead"></thead>
<tr>
</tr>
<tbody id="tbody"></tbody>
</table>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/nb-list.js"></script>
<script>
$(function () {
$.linan('/server-json.html');
});
</script>
</body>
</html>

CMDB

python学习笔记_week26的更多相关文章

  1. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  2. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  3. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  4. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  5. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  6. python学习笔记--Django入门0 安装dangjo

    经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...

  7. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  8. Pythoner | 你像从前一样的Python学习笔记

    Pythoner | 你像从前一样的Python学习笔记 Pythoner

  9. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

随机推荐

  1. leetcode python 009

    ##懒得自己做 ##  验证回文数字int0=63435435print(int(str(int0)[::-1])==int)

  2. vscode下调试运行c++

    vscode是微软的最新产品,轻量易用,最初是前端用的多,尤其是typescript,因为vscode的作者也是typescipt作者.一般c++的IDE很多,比如visual studio等,但是都 ...

  3. 温度转换-python

    #接收一段字符串 TempStr = input("请输入带有符号的温度值:") #如果 TS 最后一位是大写或是小写 f if TempStr[-1] in ['F','f']: ...

  4. spring(二、bean生命周期、用到的设计模式、常用注解)

    spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...

  5. 使用 JavaScript 截屏

    经常在微博上看到很多内容使用的什么长微博截图,并且截图上还附加了很多其他的信息.之前对纯前端截图有些研究,正好本博客有这个需求,今天就把这东西实现了下. 需要声明的是,JavaScript 目前还不能 ...

  6. python 多协程异步IO爬取网页加速3倍。

    from urllib import request import gevent,time from gevent import monkey#该模块让当前程序所有io操作单独标记,进行异步操作. m ...

  7. 《C语言程序设计》编程总结汇总

    <C语言程序设计>编程总结汇总 院系: 专业年级: 班级名称: 学号: 姓名: 指导教师: 完成时间: 自我评价: 计算机科学与技术专业教研室 2018 年秋季学期 第四周编程总结 题目4 ...

  8. #考研笔记#计算机之word问题

    Word 问题:1. 如何为文档加密保存?单击 office 按钮\另存为\工具按钮\常规选项\设置打开文件时的密码 2. 怎样在横格稿纸中录入古诗?单击 office 按钮\新建\模板\信纸\稿纸( ...

  9. 第五节《Git基本操作》

    我们给原来的数据打一个tag(标签),专业术语叫做“里程碑”,我们先不介绍里程碑的奥秘,只要知道里程碑无非也是一个引用而已. [root@git demo]# pwd/git/my/workspace ...

  10. Python数据存储:pickle模块的使用讲解

    在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间.Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象 ...