CMDB中表关联
一、jinja2方法
前端html代码:
<div class="form-group"> <label for="idc_id" class="col-sm-3 control-label">所在机房ID</label> <div class="col-sm-8"> <select id=‘idc_id‘ name="idc_id" class=‘multiselect dropdown-togglebtn btn-default‘> //通过后端传来的idcinfo,在前端进行渲染 {% for idc in idcinfo %} <option value="{{ idc.id }}">{{ idc.name }}</option> {% endfor %} </select> </div> </div><!--idc-->
js代码:
<script> //调用multiselect插件 $(‘#idc_id‘).multiselect({ placeholder: "请选择", enableCaseInsensitiveFiltering: true }) $(‘#idc_id‘).multiselect(‘refresh‘) </script>
逻辑端:
@app.route(‘/cabinetadd‘,methods = [‘GET‘,‘POST‘]) def cabinet_add(): if not session.get(‘username‘,None): return redirect("/login") if request.method == ‘GET‘: # 获取机房表的数据传给前端 data = DB().get_list(‘idc‘,idc_fields) return render_template(‘cabinet/cabinetadd.html‘,idcinfo=data,info=session) else: ... ...
二、jquery方法
前端html代码:
<div class="form-group"> <label for="idc_id" class="col-sm-3 control-label">所在机房ID</label> <div class="col-sm-8"> <select id=‘idc_id‘ name="idc_id" class=‘multiselect dropdown-togglebtn btn-default‘> </select> </div> </div><!--idc-->
js代码:
var str = ‘‘ $.getJSON(‘/idc_msg‘,function(data){ idcs = data[‘result‘] for(var i=0;i<idcs.length;i++){ str += ‘<option value="‘+idcs[i][‘id‘]+‘">‘+idcs[i][‘name‘]+‘</option>‘ $(‘#idc_id‘).html(str) } //调用插件 $(‘#idc_id‘).multiselect({ placeholder: "请选择", enableCaseInsensitiveFiltering: true }) $(‘#idc_id‘).multiselect(‘refresh‘) })
逻辑端回调函数:
@app.route(‘/idc_msg/‘) def idc_msg(): if not session.get(‘name‘): return render_template(‘login.html‘) idcs = db.list(‘idc‘,fields_idc) return json.dumps({‘result‘:idcs})
效果图:
Python DBUtils模块
DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。
DBUtils.PooledDB 实现了一个强硬的、线程安全的、有缓存的、可复用的数据库连接,使用任何DB-API 2模块。
PooledDB提供线程间可共享的数据库连接,并自动管理连接。
一个使用过程:
db=pooled.connection() cur=db.cursor() cur.execute(sql) res=cur.fetchall() cur.close() db.close()
实例:
from DBUtils.PooledDB import PooledDB import MySQLdb class DB(): def __init__(self): self.host = localhost self.name = reboot self.user = root self.passwd = 123456 # 启动时连接池中创建的的连接数 # ‘mincached‘: 4 # 连接池中最大允许创建的连接数 # ‘maxcached‘: 10 # 创建连接池 self.pool = PooledDB(MySQLdb, mincached=4, maxcached=10, host=self.host,db=self.name,user=self.user,passwd=self.passwd,setsession=[‘SET AUTOCOMMIT = 1‘]) # 获取连接,并创建游标 def connect_db(self): self.db = self.pool.connection() self.cur = self.db.cursor() # 释放连接 def close_db(self): self.cur.close() self.db.close() # 执行sql语句 def execute(self,sql): self.connect_db() return self.cur.execute(sql) # 获取特定表的特定关键字 def get_list(self,table,fields): sql = "select %s from %s"% (",".join(fields),table) self.execute(sql) result = self.cur.fetchall() if result: result = [dict((k,row[i]) for i, k in enumerate(fields)) for row in result] else: result = {} self.close_db() return result ... ...
ECharts插件
ECharts是一个纯Javascript的图表库,提供了常规的折线图,柱状图,散点图,饼图,K线图等,能够直观,生动,可交互,可高度个性化定制的数据可视化图表
引入插件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts</title> <!--引入echart.js--> <script src=‘/static/pulgin/echarts/echarts.min.js‘></script> </head> <body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: 600px;height:400px;"></div> </body> </html>
调用插件
<script> // 通过‘/memdata‘获取数据,以json格式传给前端 $.getJSON(‘/memdata‘,function(data){ // 初始化echart实例 var myChart = echarts.init($(‘#mem‘)[0]); // 指定图标的配置项和数据 var option = { // 标题组件,包含主标题的副标题 title: { text: ‘服务器内存使用率‘, subtext: ‘项目演练‘ }, // 提示框组件 tooltip: { trigger: ‘axis‘ }, // 图例组件 legend: { data:[‘内存使用率‘] }, // 工具栏 toolbox: { show: true, feature: { dataZoom:{show:true}, dataView: {show:true,readOnly:true,title : ‘数据视图‘,lang : [‘数据视图‘,‘关闭‘]}, magicType: {show:true,type: [‘line‘, ‘bar‘]}, restore: {show:true,title:‘还原‘}, saveAsImage: {show:true,title:"保存图片"} } }, // x轴 xAxis: { type: ‘time‘, boundaryGap: false, }, // y轴 yAxis: { type: ‘value‘, axisLabel: { formatter : ‘{value} %‘ } }, // 系列列表,通过type决定图标类型 series: [ { name:‘内存使用率‘, type:‘line‘, data:data.result, // 地图区域的多边形 图形样式 itemStyle: { normal: { color: ‘rgb(255, 70, 131)‘ } }, // 分隔区域的样式 areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: ‘rgb(255, 158, 68)‘ }, { offset: 1, color: ‘rgb(255, 70, 131)‘ }]) } }, }, ] } // 使用刚指定的配置项和数据显示图表 myChart.setOption(option) // 每5秒请求一次数据 setInterval(function(){ $.getJSON(‘/memdata‘,function(data){ console.log(data.data) myChart.setOption({ series:[{ data:data.data }] }) }) },5000) }) </script>
效果图
学习地址:http://echarts.baidu.com/tutorial.html#ECharts%20%E7%89%B9%E6%80%A7%E4%BB%8B%E7%BB%8D
其他模块
logging模块
功能:默认情况下python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志。
学习地址:http://blog.csdn.net/zyz511919766/article/details/25136485
trackback模块
功能:追踪异常。通过try...except捕获异常,然后traceback.print_exc()打印出来,format_exc()与print_exc()类似,不过返回的是一个string。
学习地址:http://www.tuicool.com/articles/f2uumm
config配置
一、直接导入配置文件
In [1]: cat config.py db_host = ‘localhost‘ db_name = ‘reboot10‘ db_user = ‘root‘ db_passwd = ‘123456‘ # 使用import直接导入配置文件 In [2]: import config # 获取数据 In [3]: config.db_name Out[3]: ‘reboot10‘
二、使用ConfigParser模块
In [1]: cat config.py [info] # 在配置文件中新加入的一行 db_host = ‘localhost‘ db_name = ‘reboot10‘ db_user = ‘root‘ db_passwd = ‘123456‘ In [2]: import ConfigParser In [3]: config = ConfigParser.ConfigParser() In [4]: config.read(‘config.py‘) Out[4]: [‘config.py‘] In [5]: name = config.get(‘info‘,‘db_name‘) In [6]: print name ‘reboot10‘
区别:使用‘import config‘更简单,灵活强大,使用ConfigParser则更加安全
原文地址:http://yaoliang83.blog.51cto.com/10991353/1856857