note
View Code
一、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
View Code
1 from django.db import models 2 # Create your models here. 3 class UserInfo(models.Model): 4 name=models.CharField(max_length=32) 5 age=models.IntegerField() 6 class BusinessUnit(models.Model): 7 name = models.CharField(max_length=32) 8 class Server(models.Model): 9 server_type_choices=( 10 (1,"WEB"), 11 (2,"存储"), 12 (3,"缓存"), 13 ) 14 server_type=models.IntegerField(choices=server_type_choices) 15 hostname=models.CharField(max_length=32) 16 port=models.IntegerField() 17 business_unit=models.ForeignKey('BusinessUnit',on_delete=models.CASCADE) 18 user=models.ForeignKey('UserInfo',on_delete=models.CASCADE)
views
View Code
1 from django.shortcuts import render 2 from django.views import View 3 from django.shortcuts import HttpResponse 4 from django.views import View 5 from app01 import models 6 import json 7 # Create your views here. 8 class BaseResponse(object): 9 def __init__(self): 10 self.status=True 11 self.data=None 12 self.message=None 13 class ServerView(View): 14 def get(self,request,*args,**kwargs): 15 return render(request,'server.html') 16 class ServerJsonView(View): 17 def get(self,request,*args,**kwargs): 18 response=BaseResponse() 19 try: 20 # 获取要显示的列 21 # 获取数据 22 table_config=[{ 23 'q':'id', 24 'title': '主机名', 25 'display':0, 26 'text':{}, 27 'attr':{} 28 },{ 29 'q':'hostname', 30 'title':'主机名', 31 'display':1, 32 'text':{'content':'{m}','kwargs':{'m':'@hostname'}}, 33 'attr': {'k1':'@hostname','k2':'v2'} 34 },# '{n}-{m}'.format({'n':'@hostname','m':'@hostname'}) =>hostname-c1.com 35 { 36 'q':'port', 37 'title': '端口', 38 'display': 1, 39 'text': {'content':'{m}', 'kwargs': { 'm': '@port'}}, 40 'attr': {'k1': '@port', 'k2': 'v2'} 41 },{ 42 'q':'business_unit_id', 43 'title': '业务线ID', 44 'display': 1, 45 #去全局变量business_unit_list=[ 46 # {id:1,name:'WEB'}, 47 # {id:2,name:'存储'}, 48 # {id:1,name:'商城'},] 49 'text': {'content': '{m}', 'kwargs': { 'm': '@@business_unit_list'}}, 50 'attr': {'k1': '@business_unit_id', 'k2': 'v2'} 51 },{ 52 'q':'business_unit__name', 53 'title': '业务线名称', 54 'display': 1, 55 'text': {'content': '{key}-{m}', 'kwargs': { 'key':'@business_unit_id','m': '@business_unit__name'}}, 56 'attr': {'k1': '@business_unit__name', 'k2': 'v2'} 57 },{ 58 'q':None, 59 'title': '操作', 60 'display': 1, 61 'text': {'content': '<a herf="server-detail-{n}.html">查看详细</a>', 'm': '@id'}, 62 'attr': {'k1': '@id', 'k2': 'v2'} 63 },] 64 values_list=[] 65 for item in table_config: 66 if item['q']: 67 values_list.append(item['q']) 68 data_list=models.Server.objects.values(*values_list) 69 #[{},{}] 70 data_list=list(data_list) 71 print(data_list) 72 response.data={ 73 'table_config': table_config, 74 'data_list':data_list, 75 } 76 except Exception as e: 77 response.status=False 78 response.message=str(e) 79 return HttpResponse(json.dumps(response.__dict__)) 80 class BusinessView(View): 81 def get(self,request,*args,**kwargs): 82 return render(request,'business.html') 83 class BusinessJsonView(View): 84 def get(self,request,*args,**kwargs): 85 response=BaseResponse() 86 try: 87 # 获取要显示的列 88 # 获取数据 89 table_config=[{ 90 'q':'id', 91 'title':'ID', 92 'display':1, 93 },{ 94 'q':'name', 95 'title': '业务线名称', 96 'display': 1, 97 },{ 98 'q':None, 99 'title': '操作', 100 'display': 1, 101 },] 102 values_list=[] 103 for item in table_config: 104 if item['q']: 105 values_list.append(item['q']) 106 data_list=models.BusinessUnit.objects.values(*values_list) 107 #[{},{}] 108 data_list=list(data_list) 109 print(data_list) 110 response.data={ 111 'table_config': table_config, 112 'data_list':data_list, 113 } 114 except Exception as e: 115 response.status=False 116 response.message=str(e) 117 return HttpResponse(json.dumps(response.__dict__))
urls
View Code
1 from django.contrib import admin 2 #from django.urls import path 3 from django.conf.urls import url 4 from app01 import views 5 urlpatterns = [ 6 url(r'^admin/',admin.site.urls), 7 url(r'^server.html',views.ServerView.as_view()), 8 url(r'^server-json.html',views.ServerJsonView.as_view()), 9 url(r'^business.html', views.BusinessView.as_view()), 10 url(r'^business-json.html', views.BusinessJsonView.as_view()), 11 ]
nb-list
View Code
1 (function (jq) { 2 var requestURL; 3 //为字符串创建format方法,用于字符串格式化 4 String.prototype.format=function(args){ 5 return this.replace(/\{(\w+)\}/g,function(s,i){ 6 return args[i]; 7 }); 8 }; 9 function init() { 10 //获取要显示的列 11 //获取数据 12 $.ajax({ 13 url:requestURL, 14 type:'GET', 15 dataType:'JSON', 16 success:function (arg) { 17 if(arg.status){ 18 //创建表格标题 19 createTablehead(arg.data.table_config); 20 /* 21 [{'hostname': 'c1.com', 'port': 11}, {'hostname': 'c2.com', 'port': 23}] 22 */ 23 createTablebody(arg.data.table_config,arg.data.data_list); 24 }else{ 25 alert(arg.message) 26 } 27 } 28 }) 29 } 30 function createTablehead(config){ 31 /* 32 tr 33 td 34 td 35 tr 36 [{ 37 'title':'主机名', 38 'display':0, 39 },{ 40 'title': '端口', 41 'display': 1, 42 }] */ 43 var tr = document.createElement('tr') 44 $.each(config,function(k,v){ 45 if(v.display){ 46 var th = document.createElement('th') 47 th.innerHTML=v.title; 48 $(tr).append(th); 49 } 50 }); 51 $('#thead').append(tr); 52 } 53 function createTablebody(tableConfig,dataList){ 54 /* 55 ,dataList=[{'hostname': 'c1.com', 'port': 11}, {'hostname': 'c2.com', 'port': 23}] 56 tableConfig=[{ 57 'q':'hostname', 58 'title':'主机名', 59 'display':1, 60 },{ 61 'q':'port', 62 'title': '端口', 63 'display': 1, 64 },{ 65 'q':None, 66 'title': '操作', 67 'display': 1, 68 }]*/ 69 $.each(dataList,function (k1,row) { 70 //row={'port':11,'hostname':'c1.com'} 71 //row={'port':22,'hostname':'c2.com'} 72 var tr=document.createElement('tr'); 73 $.each(tableConfig,function (k2,configItem) { 74 if(configItem.display){ 75 /*configItem={ 76 'q':'hostname', 77 'title':'主机名', 78 'display':1,}, 79 'text': {'content': '<a herf="server-detail-{n}.html">查看详细</a>', 'm': '@id'} 80 'attr':{}, */ 81 var td =document.createElement('td'); 82 //td.innerHTML=row[configItem.q]; 83 //configItem.text.content 84 var kwargs={}; 85 $.each(configItem.text.kwargs,function (key,value) { 86 if(value.startsWith("@")){ 87 var temp=value.substring(1,value.length); 88 kwargs[key]=row[temp] 89 }else{ 90 kwargs[key]=value; 91 } 92 }); 93 td.innerHTML=configItem.text.content.format(kwargs); 94 $.each(configItem.attr,function (key,value) { 95 if(value.startsWith("@")){ 96 var temp=value.substring(1,value.length); 97 td.setAttribute(key,row[temp]); 98 }else{ 99 td.setAttribute(key,value); 100 } 101 }); 102 $(tr).append(td); 103 }}); 104 $('#tbody').append(tr); 105 })} 106 jq.extend({ 107 'linan': function (url) { 108 requestURL=url 109 init(); 110 } 111 }) 112 })(jQuery);
business
View Code
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <table border="1"> 9 <thead id="thead"></thead> 10 <tr> 11 </tr> 12 <tbody id="tbody"></tbody> 13 </table> 14 <script src="/static/jquery-1.12.4.js"></script> 15 <script src="/static/nb-list.js"></script> 16 <script> 17 $(function () { 18 $.linan('/business-json.html'); 19 }); 20 </script> 21 </body> 22 </html>
server
View Code
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <table border="1"> 9 <thead id="thead"></thead> 10 <tr> 11 </tr> 12 <tbody id="tbody"></tbody> 13 </table> 14 <script src="/static/jquery-1.12.4.js"></script> 15 <script src="/static/nb-list.js"></script> 16 <script> 17 $(function () { 18 $.linan('/server-json.html'); 19 }); 20 </script> 21 </body> 22 </html>
CMDB