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則更加安全