我的python學習--第十一天(二)

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})


效果圖:

wKiom1fotyfzdD7TAAAizhn2bfY059.png



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>


效果圖

wKiom1fo4KLT3XcaAAB3mfI8iRs497.png


學習地址: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則更加安全

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章