首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

Django 搭建CMDB系统完整[14](运维记录)

templates/search_yunweijilu.html {% extends 'base.html' %} {% block title %} <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.pack.js"></script> <link rel="stylesheet" type="text/css" href="/static/style/authority/jquery.fancybox-1.3.4.css" media="screen"></link> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <script src="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.js"></script> <link href="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" /> <script src="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.js"></script> <script type="text/javascript" src="/static/scripts/datetime/jQuery-Timepicker/dist/i18n/jquery-ui-timepicker-zh-CN.js"></script> <link href="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.css" rel="stylesheet" /> <script type="text/javascript"> (function($) { $(function() { $.datepicker.regional['zh-CN'] = { changeMonth: true, changeYear: true, clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigText: '<<', prevBigStatus: '显示上一年', nextText: '下月>', nextStatus: '显示下月', nextBigText: '>>', nextBigStatus: '显示下一年', currentText: '今天', currentStatus: '显示本月', monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], monthStatus: '选择月份', yearStatus: '选择年份', weekHeader: '周', weekStatus: '年内周次', dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'], dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 d日, DD', dateFormat: 'yy-mm-dd', firstDay: 1, initStatus: '请选择日期', isRTL: false }; }); $(function() { $.datepicker.setDefaults($.datepicker.regional['zh-CN']); $("#kssj").datetimepicker(); $("#jssj").datetimepicker(); }); }(jQuery)); </script> <div id="container"> <div class="ui_content"> <div class="ui_text_indent"> <div id="box_border"> <div id="box_top">搜索</div> 问题描述<input type="text" id="wtms" name="wtms" value="{{ wtms }}" class="ui_input_txt03" /> 问题来源<input type="text" id="wtly" name="wtly" value="{{ wtly }}" class="ui_input_txt03" style="width:50px" /> 处理人<input type="text" id="clr" name="clr" value="{{ clr }}" class="ui_input_txt03" style="width:50px" /> 开始时间<input type="text" id="kssj" name="kssj" value="{{ kssj|date:"Y-m-d H:i" }}" class="ui_input_txt03" style="width:70px" /> 结束时间<input type="text" id="jssj" name="jssj" value="{{ jssj|date:"Y-m-d H:i" }}" class="ui_input_txt03" style="width:70px" /> 类型 <select id="type" name="type" class="ui_select02"> <option value=100 selected = "selected">所有</option> <option value=0 {% if type == 0 %} selected = "selected" {% endif %}>日常巡检</option> <option value=1 {% if type == 1 %} selected = "selected" {% endif %}>网络设备配置</option> <option value=2 {% if type == 2 %} selected = "selected" {% endif %}>安全设备配置</option> <option value=3 {% if type == 3 %} selected = "selected" {% endif %}>系统部署</option> <option value=4 {% if type == 4 %} selected = "selected" {% endif %}>安全运维</option> <option value=5 {% if type == 5 %} selected = "selected" {% endif %}>系统更新/维护</option> <option value=6 {% if type == 6 %} selected = "selected" {% endif %}>系统重启</option> <option value=7 {% if type == 7 %} selected = "selected" {% endif %}>系统迁移</option> <option value=8 {% if type == 8 %} selected = "selected" {% endif %}>系统扩容</option> <option value=9 {% if type == 9 %} selected = "selected" {% endif %}>技术支持</option> </select> 机房<select id="machinaroom" name="machinaroom" class="ui_select02" > <option value=100 selected = "selected">所有</option> {% for mr in machinaroomlist %} <option value={{ mr.id }} {% if mr.id == machinaroom %} selected = "selected" {% endif %}>{{ mr.name }}</option> {% endfor %} </select> </div> <div id="box_bottom"> <div class="pagination"> <span class="current"> {% if yunweijilulist.has_previous %} <a href="javascript:void(0)" onclick="search_yunweijilu({{ yunweijilulist.previous_page_number }});">上一页</a> {% endif %} <span class="current"> Page {{ yunweijilulist.number }} of {{ yunweijilulist.paginator.num_pages }}. </span> {% if yunweijilulist.has_next %} <a href="javascript:void(0)" onclick="search_yunweijilu({{ yunweijilulist.next_page_number }});">下一页</a> {% endif %} </span> </div> <input type="button" value="查询" class="ui_input_btn01" onclick="search_yunweijilu(1);"/> <input type="button" value="新增" class="ui_input_btn01" onclick="add_yunweijilu();" /> <input type="button" value="删除" class="ui_input_btn01" onclick="batdel_yunweijilu();" /> <input type="button" value="导出EXCEL" class="ui_input_btn01" onclick="excel_yunweijilu();" /> </div> </form> </div> </div> {% endblock %} {% block content %} <div class="ui_content"> <div class="ui_tb"> <table class="table1" cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> <tr> <th width="30"><input type="checkbox" id="id" name="id" /> </th> <th>类型</th> <th>问题描述</th> <th>问题来源</th> <th>接收时间</th> <th>处理人</th> <th>开始时间</th> <th>结束时间</th> <th>处理办法</th> <th>备注</th> <th>机房</th> <th>操作</th> </tr> {% for s in yunweijilulist.object_list %} <tr> <td><input type="checkbox" name="idcheck" value={{ s.id }} class="acb" /></td> <td> {% if s.type == 0 %} 日常巡检 {% elif s.type == 1 %} 网络设备配置 {% elif s.type == 2 %} 安全设备配置 {% elif s.type == 3 %} 系统部署 {% elif s.type == 4 %} 安全运维 {% elif s.type == 5 %} 系统更新/维护 {% elif s.type == 6 %} 系统重启 {% elif s.type == 7 %} 系统迁移 {% elif s.type == 8 %} 系统扩容 {% elif s.type == 9 %} 技术支持 {% endif %} </td> <td title="{{ s.wtms }}">{{ s.wtms|truncatechars:"8" }}</td> <td title="{{ s.wtly }}">{{ s.wtly|truncatechars:"8" }}</td> <td title="{{ s.wtjssj|date:"Y-m-d H:i" }}">{{ s.wtjssj|date:"Y-m-d" }}</td> <td title="{{ s.clr }}">{{ s.clr|truncatechars:"8" }}</td> <td title="{{ s.kssj|date:"Y-m-d H:i" }}">{{ s.kssj|date:"Y-m-d" }}</td> <td title="{{ s.jssj|date:"Y-m-d H:i" }}">{{ s.jssj|date:"Y-m-d" }}</td> <td title="{{ s.clbf }}">{{ s.clbf|truncatechars:"8" }}</td> <td title="{{ s.memo }}">{{ s.memo|truncatechars:"6"}}</td> <td title="{{ s.machinaroom.name }}">{{ s.machinaroom.name|truncatechars:"8"}}</td> <td> <a href="javascript:void(0)" onclick="edit_yunweijilu('{{ s.id }}')" class="edit">编辑</a> <a href="javascript:void(0)" onclick="del_yunweijilu({{ s.id }},{{ yunweijilulist.number }});">删除</a> </td> </tr> {% endfor %} </table> </div> </div> </div> <script type="text/javascript"> function search_yunweijilu(page){ var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; var myurl="search_yunweijilu.html"+"?"+"wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom+"&&page="+page; window.location.assign(encodeURI(myurl)) } function add_yunweijilu(){ var width = 400; var height = 500; var left = parseInt((screen.availWidth/2) - (width/2));//屏幕居中 var top = parseInt((screen.availHeight/2) - (height/2)); var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top; newWindow = window.open("add_yunweijilu.html", "subWind", windowFeatures); } function edit_yunweijilu(id){ var width = 400; var height = 500; var left = parseInt((screen.availWidth/2) - (width/2));//屏幕居中 var top = parseInt((screen.availHeight/2) - (height/2)); var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top; newWindow = window.open("edit_yunweijilu.html?id="+id, "subWind", windowFeatures); } function del_yunweijilu(id,page){ if(window.confirm('确定要删除该记录吗?')){ var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; var myurl="del_yunweijilu.html"+"?"+"id="+id+"&&wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom+"&&page="+page; window.location.assign(encodeURI(myurl)) return true; }else{ //alert("取消"); return false; } } function batdel_yunweijilu(){ if(window.confirm('确定要删除记录吗?')){ obj = document.getElementsByName("idcheck"); var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; check_val = []; for(k in obj){ if(obj[k].checked) check_val.push(obj[k].value); } var myurl="batdel_yunweijilu.html"+"?"+"ids="+check_val+"&&wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom; window.location.assign(encodeURI(myurl)) return true; }else{ return false; } } function excel_yunweijilu(){ var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; var myurl="excel_yunweijilu.html"+"?"+"wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom; window.location.assign(encodeURI(myurl)) } </script> {% endblock %} templates/add_yunweijilu.html <!DOCTYPE html> <html> <head> <title>CMDB</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script src="/static/scripts/My97DatePicker/WdatePicker.js" type="text/javascript" defer="defer"></script> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <script src="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.js"></script> <link href="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" /> <script src="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.js"></script> <script type="text/javascript" src="/static/scripts/datetime/jQuery-Timepicker/dist/i18n/jquery-ui-timepicker-zh-CN.js"></script> <link href="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.css" rel="stylesheet" /> <script type="text/javascript"> (function($) { $(function() { $.datepicker.regional['zh-CN'] = { changeMonth: true, changeYear: true, clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigText: '<<', prevBigStatus: '显示上一年', nextText: '下月>', nextStatus: '显示下月', nextBigText: '>>', nextBigStatus: '显示下一年', currentText: '今天', currentStatus: '显示本月', monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], monthStatus: '选择月份', yearStatus: '选择年份', weekHeader: '周', weekStatus: '年内周次', dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'], dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 d日, DD', dateFormat: 'yy-mm-dd', firstDay: 1, initStatus: '请选择日期', isRTL: false }; }); $(function() { $.datepicker.setDefaults($.datepicker.regional['zh-CN']); $("#yunweijiluwtjssj").datetimepicker(); $("#yunweijilukssj").datetimepicker(); $("#yunweijilujssj").datetimepicker(); }); }(jQuery)); </script> <form id="addyunweijiluform" name="addyunweijiluform" action="add_yunweijilu.html" method="post"> <div id="container"> <div id="nav_links"> 当前位置:运维管理><span style="color: #1A5CC6;">新增运维记录</span> <div id="page_close"> <a href="javascript:parent.$.fancybox.close();"> <img src="/static/images/common/page_close.png" width="20" height="20" style="vertical-align: text-top;"/> </a> </div> </div> <div class="ui_content"> <table cellspacing="0" cellpadding="0" width="100%" align="left" border="0"> <tr> <td class="ui_text_rt">类型:</td> <td class="ui_text_lt"> <select name="yunweijilutype" id="yunweijilutype" class="ui_select01" > <option value=0>日常巡检</option> <option value=1>网络设备配置</option> <option value=2>安全设备配置</option> <option value=3>系统部署</option> <option value=4>安全运维</option> <option value=5>系统更新/维护</option> <option value=6>系统重启</option> <option value=7>系统迁移</option> <option value=8>系统扩容</option> <option value=9>技术支持</option> </select> </td> </tr> <tr> <td class="ui_text_rt">问题描述:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtms" name="yunweijiluwtms" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题来源:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtly" name="yunweijiluwtly" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题接收时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtjssj" name="yunweijiluwtjssj" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">处理人:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclr" name="yunweijiluclr" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">开始时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilukssj" name="yunweijilukssj" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">结束时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilujssj" name="yunweijilujssj" value="" class="ui_input_txt02" /> </td> </tr> <tr> </tr> <tr> <td class="ui_text_rt">处理办法:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclbf" name="yunweijiluclbf" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">备注:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilumemo" name="yunweijilumemo" value="" class="ui_input_txt02" /> </td> </tr> </tr> <tr> <td class="ui_text_rt">机房:</td> <td class="ui_text_lt"> <select name="yunweijilumachinaroom" id="yunweijilumachinaroom" class="ui_select01" > {% for mr in machinaroomlist %} <option value={{ mr.id }}>{{ mr.name }}</option> {% endfor %} </select> </td> </tr> <tr> <td>&nbsp;</td> <td class="ui_text_lt"> &nbsp;<input id="submitbutton" type="submit" value="提交" class="ui_input_btn01"/> &nbsp;<input id="cancelbutton" type="cancel" value="取消" class="ui_input_btn01"/> </td> </tr> </table> </div> </div> </form> </body> </html> templates/edit_yunweijilu.html <!DOCTYPE html> <html> <head> <title>CMDB</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script src="/static/scripts/My97DatePicker/WdatePicker.js" type="text/javascript" defer="defer"></script> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <script src="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.js"></script> <link href="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" /> <script src="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.js"></script> <script type="text/javascript" src="/static/scripts/datetime/jQuery-Timepicker/dist/i18n/jquery-ui-timepicker-zh-CN.js"></script> <link href="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.css" rel="stylesheet" /> <script type="text/javascript"> (function($) { $(function() { $.datepicker.regional['zh-CN'] = { changeMonth: true, changeYear: true, clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigText: '<<', prevBigStatus: '显示上一年', nextText: '下月>', nextStatus: '显示下月', nextBigText: '>>', nextBigStatus: '显示下一年', currentText: '今天', currentStatus: '显示本月', monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], monthStatus: '选择月份', yearStatus: '选择年份', weekHeader: '周', weekStatus: '年内周次', dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'], dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 d日, DD', dateFormat: 'yy-mm-dd', firstDay: 1, initStatus: '请选择日期', isRTL: false }; }); $(function() { $.datepicker.setDefaults($.datepicker.regional['zh-CN']); $("#yunweijiluwtjssj").datetimepicker(); $("#yunweijilukssj").datetimepicker(); $("#yunweijilujssj").datetimepicker(); }); }(jQuery)); </script> </head> <body> <form id="edityunweijiluform" name="edityunweijiluform" action="edit_yunweijilu.html" method="post"> <div id="container"> <div id="nav_links"> 当前位置:配置管理><span style="color: #1A5CC6;">编辑运维记录</span> <div id="page_close"> <a href="javascript:parent.$.fancybox.close();"> <img src="/static/images/common/page_close.png" width="20" height="20" style="vertical-align: text-top;"/> </a> </div> </div> <div class="ui_content"><input style="visibility:hidden" value={{ yunweijilu.id }} type="text" name="id" id="id" /> <table cellspacing="0" cellpadding="0" width="100%" align="left" border="0"> <tr> <td class="ui_text_rt">类型:</td> <td class="ui_text_lt"> <select name="yunweijilutype" id="yunweijilutype" class="ui_select01" > <option value=0 {% if yunweijilu.type == 0 %} selected="selected" {% endif %}>日常巡检</option> <option value=1 {% if yunweijilu.type == 1 %} selected="selected" {% endif %}>网络设备配置</option> <option value=2 {% if yunweijilu.type == 2 %} selected="selected" {% endif %}>安全设备配置</option> <option value=3 {% if yunweijilu.type == 3 %} selected="selected" {% endif %}>系统部署</option> <option value=4 {% if yunweijilu.type == 4 %} selected="selected" {% endif %}>安全运维</option> <option value=5 {% if yunweijilu.type == 5 %} selected="selected" {% endif %}>系统更新/维护</option> <option value=6 {% if yunweijilu.type == 6 %} selected="selected" {% endif %}>系统重启</option> <option value=7 {% if yunweijilu.type == 7 %} selected="selected" {% endif %}>系统迁移</option> <option value=8 {% if yunweijilu.type == 8 %} selected="selected" {% endif %}>系统扩容</option> <option value=9 {% if yunweijilu.type == 9 %} selected="selected" {% endif %}>技术支持</option> </select> </td> </tr> <tr> <td class="ui_text_rt">问题描述:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtms" name="yunweijiluwtms" value="{{ yunweijilu.wtms }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题来源:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtly" name="yunweijiluwtly" value="{{ yunweijilu.wtly }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题接收时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtjssj" name="yunweijiluwtjssj" value="{{ yunweijilu.wtjssj|date:"Y-m-d H:i" }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">处理人:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclr" name="yunweijiluclr" value="{{ yunweijilu.clr }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">开始时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilukssj" name="yunweijilukssj" value="{{ yunweijilu.kssj|date:"Y-m-d H:i" }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">结束时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilujssj" name="yunweijilujssj" value="{{ yunweijilu.jssj|date:"Y-m-d H:i" }}" class="ui_input_txt02" /> </td> </tr> <tr> </tr> <tr> <td class="ui_text_rt">处理办法:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclbf" name="yunweijiluclbf" value="{{ yunweijilu.clbf }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">备注:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilumemo" name="yunweijilumemo" value="{{ yunweijilu.memo }}" class="ui_input_txt02" /> </td> </tr> </tr> <tr> <td class="ui_text_rt">机房:</td> <td class="ui_text_lt"> <select name="yunweijilumachinaroom" id="yunweijilumachinaroom" class="ui_select01" > {% for mr in machinaroomlist %} <option value={{ mr.id }} {% if yunweijilu.machinaroom.id == mr.id %} selected="selected" {% endif %}>{{ mr.name }}</option> {% endfor %} </select> </td> </tr> <tr> <td>&nbsp;</td> <td class="ui_text_lt"> &nbsp;<input id="submitbutton" type="submit" value="提交" class="ui_input_btn01"/> &nbsp;<input id="cancelbutton" type="cancel" value="取消" class="ui_input_btn01"/> </td> </tr> </table> </div> </div> </form> </body> </html>

优秀的个人博客,低调大师

Django 搭建CMDB系统完整[12](软件资产、厂商)

search_software.html {% extends 'base.html' %} {% block title %} <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.pack.js"></script> <link rel="stylesheet" type="text/css" href="/static/style/authority/jquery.fancybox-1.3.4.css" media="screen"></link> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <div id="container"> <div class="ui_content"> <div class="ui_text_indent"> <div id="box_border"> <div id="box_top">搜索</div> 软件名字<input type="text" id="mname" name="mname" value="{{ mname }}" class="ui_input_txt02" /> </div> <div id="box_top">新增/编辑</div> <form id="submitForm" name="submitForm" method="post" action="add_software.html"> <input type="hidden" id="softwareid" name="softwareid"/> 软件名字<input type="text" id="softwarename" name="softwarename" class="ui_input_txt02" /> 授权数<input type="text" id="softwarelicense_num" name="softwarelicense_num" class="ui_input_txt02" /> 版本号<input type="text" id="softwareversion" name="softwareversion" class="ui_input_txt02" /> </div> <div id="box_bottom"> <div class="pagination"> <span class="current"> {% if softwarelist.has_previous %} <a href="javascript:void(0)" onclick="search_software({{ softwarelist.previous_page_number }});">上一页</a> {% endif %} <span class="current"> Page {{ softwarelist.number }} of {{ softwarelist.paginator.num_pages }}. </span> {% if softwarelist.has_next %} <a href="javascript:void(0)" onclick="search_software({{ softwarelist.next_page_number }});">下一页</a> {% endif %} </span> </div> <input type="button" value="查询" class="ui_input_btn01" onclick="search_software(1);"/> <input type="submit" value="新增" class="ui_input_btn01" /> <input type="button" value="编辑" class="ui_input_btn01" onclick="edit_software({{ softwarelist.number }});" /> <input type="button" value="删除" class="ui_input_btn01" onclick="batdel_software();" /> <input type="button" value="导出EXCEL" class="ui_input_btn01" onclick="excel_software();" /> </div> </form> </div> </div> {% endblock %} {% block content %} <div class="ui_content"> <div class="ui_tb"> <table class="table" cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> <tr> <th width="30"><input type="checkbox" id="id" name="id" /> </th> <th>软件名字</th> <th>授权数</th> <th>版本号</th> <th>操作</th> </tr> {% for mr in softwarelist.object_list %} <tr> <td><input type="checkbox" name="idcheck" value={{ mr.id }} class="acb" /></td> <td>{{ mr.name }}</td> <td>{{ mr.license_num }}</td> <td>{{ mr.version }}</td> <td> <a href="javascript:void(0)" onclick="edit_mr('{{ mr.id }}','{{ mr.name }}','{{ mr.license_num }}','{{ mr.version }}')" class="edit">编辑</a> <a href="javascript:void(0)" onclick="del_software({{ mr.id }},{{ softwarelist.number }});">删除</a> </td> </tr> {% endfor %} </table> </div> </div> </div> <script type="text/javascript"> function search_software(page){ var text1 = document.getElementById("mname").value; var myurl="search_software.html"+"?"+"mname="+text1+"&&page="+page; window.location.assign(encodeURI(myurl)) } function edit_mr(id,name,license_num,version){ document.getElementById("softwareid").value=id; document.getElementById("softwarename").value=name; document.getElementById("softwarelicense_num").value=license_num; document.getElementById("softwareversion").value=version; } function edit_software(page){ var text1 = document.getElementById("mname").value; id=document.getElementById("softwareid").value; name=document.getElementById("softwarename").value; license_num=document.getElementById("softwarelicense_num").value; version=document.getElementById("softwareversion").value; var myurl="edit_software.html"+"?"+"id="+id+"&&name="+name+"&&license_num="+license_num+"&&version="+version+"&&mname="+text1+"&&page="+page; window.location.assign(encodeURI(myurl)) } function del_software(id,page){ if(window.confirm('确定要删除该记录吗?')){ var text1= document.getElementById("mname").value; var myurl="del_software.html"+"?"+"id="+id+"&&mname="+text1+"&&page="+page; window.location.assign(encodeURI(myurl)) return true; }else{ //alert("取消"); return false; } } function batdel_software(){ if(window.confirm('确定要删除记录吗?')){ obj = document.getElementsByName("idcheck"); var text1= document.getElementById("mname").value; check_val = []; for(k in obj){ if(obj[k].checked) check_val.push(obj[k].value); } var myurl="batdel_software.html"+"?"+"ids="+check_val+"&&mname="+text1; window.location.assign(encodeURI(myurl)) return true; }else{ return false; } } function excel_software(){ var text1 = document.getElementById("mname").value; var myurl="excel_software.html"+"?"+"mname="+text1; window.location.assign(encodeURI(myurl)) } </script> {% endblock %} search_manufactory.html {% extends 'base.html' %} {% block title %} <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.pack.js"></script> <link rel="stylesheet" type="text/css" href="/static/style/authority/jquery.fancybox-1.3.4.css" media="screen"></link> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <div id="container"> <div class="ui_content"> <div class="ui_text_indent"> <div id="box_border"> <div id="box_top">搜索</div> 厂商名字<input type="text" id="mname" name="mname" value="{{ mname }}" class="ui_input_txt02" /> </div> <div id="box_top">新增/编辑</div> <form id="submitForm" name="submitForm" method="post" action="add_manufactory.html"> <input type="hidden" id="manufactoryid" name="manufactoryid"/> 厂商名字<input type="text" id="manufactorymanufactory" name="manufactorymanufactory" class="ui_input_txt02" /> 厂商电话<input type="text" id="manufactorysupport_num" name="manufactorysupport_num" class="ui_input_txt02" /> 备注<input type="text" id="manufactorymemo" name="manufactorymemo" class="ui_input_txt02" /> </div> <div id="box_bottom"> <div class="pagination"> <span class="current"> {% if manufactorylist.has_previous %} <a href="javascript:void(0)" onclick="search_manufactory({{ manufactorylist.previous_page_number }});">上一页</a> {% endif %} <span class="current"> Page {{ manufactorylist.number }} of {{ manufactorylist.paginator.num_pages }}. </span> {% if manufactorylist.has_next %} <a href="javascript:void(0)" onclick="search_manufactory({{ manufactorylist.next_page_number }});">下一页</a> {% endif %} </span> </div> <input type="button" value="查询" class="ui_input_btn01" onclick="search_manufactory(1);"/> <input type="submit" value="新增" class="ui_input_btn01" /> <input type="button" value="编辑" class="ui_input_btn01" onclick="edit_manufactory({{ manufactorylist.number }});" /> <input type="button" value="删除" class="ui_input_btn01" onclick="batdel_manufactory();" /> <input type="button" value="导出EXCEL" class="ui_input_btn01" onclick="excel_manufactory();" /> </div> </form> </div> </div> {% endblock %} {% block content %} <div class="ui_content"> <div class="ui_tb"> <table class="table" cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> <tr> <th width="30"><input type="checkbox" id="id" name="id" /> </th> <th>厂商名字</th> <th>厂商电话</th> <th>备注</th> <th>操作</th> </tr> {% for mr in manufactorylist.object_list %} <tr> <td><input type="checkbox" name="idcheck" value={{ mr.id }} class="acb" /></td> <td>{{ mr.manufactory }}</td> <td>{{ mr.support_num }}</td> <td>{{ mr.memo }}</td> <td> <a href="javascript:void(0)" onclick="edit_mr('{{ mr.id }}','{{ mr.manufactory }}','{{ mr.support_num }}','{{ mr.memo }}')" class="edit">编辑</a> <a href="javascript:void(0)" onclick="del_manufactory({{ mr.id }},{{ manufactorylist.number }});">删除</a> </td> </tr> {% endfor %} </table> </div> </div> </div> <script type="text/javascript"> function search_manufactory(page){ var text1 = document.getElementById("mname").value; var myurl="search_manufactory.html"+"?"+"mname="+text1+"&&page="+page; window.location.assign(encodeURI(myurl)) } function edit_mr(id,name,license_num,version){ document.getElementById("manufactoryid").value=id; document.getElementById("manufactorymanufactory").value=name; document.getElementById("manufactorysupport_num").value=license_num; document.getElementById("manufactorymemo").value=version; } function edit_manufactory(page){ var text1 = document.getElementById("mname").value; id=document.getElementById("manufactoryid").value; name=document.getElementById("manufactorymanufactory").value; license_num=document.getElementById("manufactorysupport_num").value; version=document.getElementById("manufactorymemo").value; var myurl="edit_manufactory.html"+"?"+"id="+id+"&&manufactory="+name+"&&support_num="+license_num+"&&memo="+version+"&&mname="+text1+"&&page="+page; window.location.assign(encodeURI(myurl)) } function del_manufactory(id,page){ if(window.confirm('确定要删除该记录吗?')){ var text1= document.getElementById("mname").value; var myurl="del_manufactory.html"+"?"+"id="+id+"&&mname="+text1+"&&page="+page; window.location.assign(encodeURI(myurl)) return true; }else{ //alert("取消"); return false; } } function batdel_manufactory(){ if(window.confirm('确定要删除记录吗?')){ obj = document.getElementsByName("idcheck"); var text1= document.getElementById("mname").value; check_val = []; for(k in obj){ if(obj[k].checked) check_val.push(obj[k].value); } var myurl="batdel_manufactory.html"+"?"+"ids="+check_val+"&&mname="+text1; window.location.assign(encodeURI(myurl)) return true; }else{ return false; } } function excel_manufactory(){ var text1 = document.getElementById("mname").value; var myurl="excel_manufactory.html"+"?"+"mname="+text1; window.location.assign(encodeURI(myurl)) } </script> {% endblock %} cmdbapp/softwareviews.py -- coding: utf-8 -- from future import unicode_literals from django.shortcuts import render,render_to_response from django.core.paginator import Paginator,InvalidPage,EmptyPage from cmdbapp.models import * from django.http import HttpResponse from django.http import HttpResponseRedirect from xlwt import * import StringIO def search_software(request): error = False each_page = 5 mname=request.GET.get('mname','0') if mname=='0' or mname.strip()=='': record_list = Software.objects.all() mname='' paginator = Paginator(record_list,each_page) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('search_software.html',{'softwarelist':contacts,"mname":mname}) else: record_list = Software.objects.filter(name=mname) paginator = Paginator(record_list,each_page) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('search_software.html',{'softwarelist':contacts,"mname":mname}) def add_software(request): n = request.POST.get('softwarename') v = request.POST.get('softwareversion') l = request.POST.get('softwarelicense_num') Software.objects.create(name=n,license_num=l,version=v) return HttpResponseRedirect('search_software.html') def edit_software(request): id=request.GET.get('id') iid=int(id) name=request.GET.get('name') l=request.GET.get('license_num') v=request.GET.get('version') Software.objects.filter(id=iid).update(name=name,license_num=l,version=v) page=request.GET.get('page') mname=request.GET.get('mname') return HttpResponseRedirect('search_software.html?mname='+mname+"&&page="+page) def del_software(request): id=request.GET.get('id') iid=int(id) Software.objects.filter(id=iid).delete() page=request.GET.get('page') mname=request.GET.get('mname') return HttpResponseRedirect('search_software.html?mname='+mname+"&&page="+page) def batdel_software(request): ids=request.GET.get('ids') b=ids.split(',') arr = map(int,b) for aaa in arr: Software.objects.filter(id=aaa).delete() mname=request.GET.get('mname') return HttpResponseRedirect('search_software.html?mname='+mname) def excel_software(request): mname=request.GET.get('mname','0') if mname=='0' or mname.strip()=='': list_obj = Software.objects.all() mname='' else: list_obj = Software.objects.filter(name=mname) if list_obj: # 创建工作薄 ws = Workbook(encoding='utf-8') w = ws.add_sheet(u"软件清单") w.write(0, 0, "id") w.write(0, 1, u"软件名字") w.write(0, 2, u"授权数") w.write(0, 3, u"版本号") # 写入数据 excel_row = 1 for obj in list_obj: data_id = obj.id data_name = obj.name data_license_num = obj.license_num data_version = obj.version w.write(excel_row, 0, data_id) w.write(excel_row, 1, data_name) w.write(excel_row, 2, data_license_num) w.write(excel_row, 3, data_version) excel_row += 1 sio = StringIO.StringIO() ws.save(sio) sio.seek(0) response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=机房清单-'+mname+'.xls' response.write(sio.getvalue()) return response cmdbapp/manufactoryviews.py -- coding: utf-8 -- from future import unicode_literals from django.shortcuts import render,render_to_response from django.core.paginator import Paginator,InvalidPage,EmptyPage from cmdbapp.models import * from django.http import HttpResponse from django.http import HttpResponseRedirect from xlwt import * import StringIO def search_manufactory(request): error = False each_page = 5 mname=request.GET.get('mname','0') if mname=='0' or mname.strip()=='': record_list = Manufactory.objects.all() mname='' paginator = Paginator(record_list,each_page) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('search_manufactory.html',{'manufactorylist':contacts,"mname":mname}) else: record_list = Manufactory.objects.filter(name=mname) paginator = Paginator(record_list,each_page) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('search_manufactory.html',{'manufactorylist':contacts,"mname":mname}) def add_manufactory(request): n = request.POST.get('manufactorymanufactory') v = request.POST.get('manufactorysupport_num') l = request.POST.get('manufactorymemo') Manufactory.objects.create(manufactory=n,support_num=v,memo=l) return HttpResponseRedirect('search_manufactory.html') def edit_manufactory(request): id=request.GET.get('id') iid=int(id) name=request.GET.get('manufactory') l=request.GET.get('support_num') v=request.GET.get('memo') Manufactory.objects.filter(id=iid).update(manufactory=name,support_num=l,memo=v) page=request.GET.get('page') mname=request.GET.get('mname') return HttpResponseRedirect('search_manufactory.html?mname='+mname+"&&page="+page) def del_manufactory(request): id=request.GET.get('id') iid=int(id) Manufactory.objects.filter(id=iid).delete() page=request.GET.get('page') mname=request.GET.get('mname') return HttpResponseRedirect('search_manufactory.html?mname='+mname+"&&page="+page) def batdel_manufactory(request): ids=request.GET.get('ids') b=ids.split(',') arr = map(int,b) for aaa in arr: Manufactory.objects.filter(id=aaa).delete() mname=request.GET.get('mname') return HttpResponseRedirect('search_manufactory.html?mname='+mname) def excel_manufactory(request): mname=request.GET.get('mname','0') if mname=='0' or mname.strip()=='': list_obj = Manufactory.objects.all() mname='' else: list_obj = Manufactory.objects.filter(name=mname) if list_obj: # 创建工作薄 ws = Workbook(encoding='utf-8') w = ws.add_sheet(u"厂商清单") w.write(0, 0, "id") w.write(0, 1, u"厂商名字") w.write(0, 2, u"电话") w.write(0, 3, u"备注") # 写入数据 excel_row = 1 for obj in list_obj: data_id = obj.id data_name = obj.manufactory data_license_num = obj.support_num data_version = obj.memo w.write(excel_row, 0, data_id) w.write(excel_row, 1, data_name) w.write(excel_row, 2, data_license_num) w.write(excel_row, 3, data_version) excel_row += 1 sio = StringIO.StringIO() ws.save(sio) sio.seek(0) response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=机房清单-'+mname+'.xls' response.write(sio.getvalue()) return response cmdb/urls.py """cmdb URL Configuration The urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from cmdbapp import machinaroomviews,serverviews,networkdeviceviews,securitydeviceviews,softwareviews,storagedeviceviews,manufactoryviews from django.contrib.auth.views import * from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.contrib import staticfiles from django.views.static import serve urlpatterns = [ url(r'^static/(?P<path>.*)',machinaroomviews.main_page,name='main_page'), url(r'^base',machinaroomviews.base,name='base'), url(r'^search_machinaroom.html',machinaroomviews.add_machinaroom,name='add_machinaroom'), url(r'^edit_machinaroom.html',machinaroomviews.edit_machinaroom,name='edit_machinaroom'), url(r'^del_machinaroom.html',machinaroomviews.del_machinaroom,name='del_machinaroom'), url(r'^batdel_machinaroom.html',machinaroomviews.batdel_machinaroom,name='batdel_machinaroom'), url(r'^excel_machinaroom.html',machinaroomviews.excel_machinaroom,name='excel_machinaroom'), url(r'^login/',serverviews.search_server,name='search_server'), url(r'^add_server.html',serverviews.edit_server,name="edit_server"), url(r'^del_server.html',serverviews.del_server,name='del_server'), url(r'^batdel_server.html',serverviews.batdel_server,name='batdel_server'), url(r'^excel_server.html',serverviews.excel_server,name='excel_server'), url(r'^search_networkdevice.html',networkdeviceviews.add_networkdevice,name="add_networkdevice"), url(r'^edit_networkdevice.html',securitydeviceviews.search_securitydevice,name='search_securitydevice'), url(r'^add_securitydevice.html',securitydeviceviews.edit_securitydevice,name="edit_securitydevice"), url(r'^del_securitydevice.html',securitydeviceviews.del_securitydevice,name='del_securitydevice'), url(r'^batdel_securitydevice.html',securitydeviceviews.batdel_securitydevice,name='batdel_securitydevice'), url(r'^excel_securitydevice.html',securitydeviceviews.excel_securitydevice,name='excel_securitydevice'), url(r'^search_storagedevice.html',storagedeviceviews.add_storagedevice,name="add_storagedevice"), url(r'^edit_storagedevice.html',softwareviews.search_software,name='search_software'), url(r'^add_software.html',manufactoryviews.search_manufactory,name='search_manufactory'), url(r'^add_manufactory.html$',manufactoryviews.add_manufactory,name='add_manufactory'), url(r'^edit_manufactory.html',manufactoryviews.edit_manufactory,name='edit_manufactory'), url(r'^del_manufactory.html',manufactoryviews.del_manufactory,name='del_manufactory'), url(r'^batdel_manufactory.html',manufactoryviews.batdel_manufactory,name='batdel_manufactory'), url(r'^excel_manufactory.html',manufactoryviews.excel_manufactory,name='excel_manufactory'), ]

优秀的个人博客,低调大师

Django 搭建CMDB系统完整[11](服务器)

templates/add_server.html edit_server.html search_server.html <!DOCTYPE html> <html> <head> <title>CMDB</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.4.4.min.js"></script> <script src="/static/scripts/My97DatePicker/WdatePicker.js" type="text/javascript" defer="defer"></script> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> </head> <body> <form id="addserverform" name="addserverform" action="add_server.html" method="post"> <div id="container"> <div id="nav_links"> 当前位置:服务器资产管理><span style="color: #1A5CC6;">新增服务器</span> <div id="page_close"> <a href="javascript:parent.$.fancybox.close();"> <img src="/static/images/common/page_close.png" width="20" height="20" style="vertical-align: text-top;"/> </a> </div> </div> <div class="ui_content"> <table cellspacing="0" cellpadding="0" width="100%" align="left" border="0"> <tr> <td class="ui_text_rt">主机名字</td> <td class="ui_text_lt"> <input type="text" id="serverhostname" name="serverhostname" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">制造商/型号</td> <td class="ui_text_lt"> <input type="text" id="servermodel" name="servermodel" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">IP</td> <td class="ui_text_lt"> <input type="text" id="serverip" name="serverip" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">操作系统</td> <td class="ui_text_lt"> <input type="text" id="serveros" name="serveros" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">CPU</td> <td class="ui_text_lt"> <input type="text" id="servercpu" name="servercpu" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">内存</td> <td class="ui_text_lt"> <input type="text" id="servermemory" name="servermemory" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">硬盘</td> <td class="ui_text_lt"> <input type="text" id="serverdisk" name="serverdisk" value="" class="ui_input_txt02" /> </td> </tr> <tr> </tr> <tr> <td class="ui_text_rt">状态</td> <td class="ui_text_lt"> <select name="serverstatus" id="serverstatus" class="ui_select01" > <option value=0>在线</option> <option value=1>已下线</option> <option value=2>未知</option> <option value=3>故障</option> <option value=4>备用</option> </select> </td> </tr> <tr> <td class="ui_text_rt">所属机房</td> <td class="ui_text_lt"> <select name="servermachinaroom" id="servermachinaroom" class="ui_select01"> {% for mr in machinaroomlist %} <option value={{ mr.id }}>{{ mr.name }}</option> {% endfor %} </select> </td> </tr> <tr> <td>&nbsp;</td> <td class="ui_text_lt"> &nbsp;<input id="submitbutton" type="submit" value="提交" class="ui_input_btn01"/> &nbsp;<input id="cancelbutton" type="cancel" value="取消" class="ui_input_btn01"/> </td> </tr> </table> </div> </div> </form> </body> </html> <!DOCTYPE html> <html> <head> <title>CMDB</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.4.4.min.js"></script> <script src="/static/scripts/My97DatePicker/WdatePicker.js" type="text/javascript" defer="defer"></script> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> </head> <body> <form id="editserverform" name="editserverform" action="edit_server.html" method="post"> <div id="container"> <div id="nav_links"> 当前位置:服务器资产管理><span style="color: #1A5CC6;">编辑服务器</span> <div id="page_close"> <a href="javascript:parent.$.fancybox.close();"> <img src="/static/images/common/page_close.png" width="20" height="20" style="vertical-align: text-top;"/> </a> </div> </div> <div class="ui_content"><input style="visibility:hidden" value={{ server.id }} type="text" name="id" id="id" /> <table cellspacing="0" cellpadding="0" width="100%" align="left" border="0"> <tr> <td class="ui_text_rt">主机名字</td> <td class="ui_text_lt"> <input type="text" id="serverhostname" name="serverhostname" value={{ server.hostname }} class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">制造商/型号</td> <td class="ui_text_lt"> <input type="text" id="servermodel" name="servermodel" value={{ server.model }} class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">IP</td> <td class="ui_text_lt"> <input type="text" id="serverip" name="serverip" value={{ server.ip }} class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">操作系统</td> <td class="ui_text_lt"> <input type="text" id="serveros" name="serveros" value={{ server.os }} class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">CPU</td> <td class="ui_text_lt"> <input type="text" id="servercpu" name="servercpu" value={{ server.cpu }} class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">内存</td> <td class="ui_text_lt"> <input type="text" id="servermemory" name="servermemory" value={{ server.memory }} class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">硬盘</td> <td class="ui_text_lt"> <input type="text" id="serverdisk" name="serverdisk" value={{ server.disk }} class="ui_input_txt02" /> </td> </tr> <tr> </tr> <tr> <td class="ui_text_rt">状态</td> <td class="ui_text_lt"> <select name="serverstatus" id="serverstatus" class="ui_select01" > <option value=0>在线</option> <option value=1>已下线</option> <option value=2>未知</option> <option value=3>故障</option> <option value=4>备用</option> </select> </td> </tr> <tr> <td class="ui_text_rt">所属机房</td> <td class="ui_text_lt"> <select name="servermachinaroom" id="servermachinaroom" class="ui_select01"> {% for mr in machinaroomlist %} <option value={{ mr.id }}>{{ mr.name }}</option> {% endfor %} </select> </td> </tr> <tr> <td>&nbsp;</td> <td class="ui_text_lt"> &nbsp;<input id="submitbutton" type="submit" value="提交" class="ui_input_btn01"/> &nbsp;<input id="cancelbutton" type="cancel" value="取消" class="ui_input_btn01"/> </td> </tr> </table> </div> </div> </form> </body> </html> {% extends 'base.html' %} {% block title %} <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.pack.js"></script> <link rel="stylesheet" type="text/css" href="/static/style/authority/jquery.fancybox-1.3.4.css" media="screen"></link> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <div id="container"> <div class="ui_content"> <div class="ui_text_indent"> <div id="box_border"> <div id="box_top">搜索</div> 机房名字<input type="text" id="mname" name="mname" value="{{ mname }}" class="ui_input_txt03" /> 主机名字<input type="text" id="sname" name="sname" value="{{ sname }}" class="ui_input_txt03" /> ip地址<input type="text" id="ip" name="ip" value="{{ ip }}" class="ui_input_txt03" /> 操作系统<input type="text" id="os" name="os" value="{{ os }}" class="ui_input_txt03" /> 状态 <select id="status" name="status" class="ui_select02"> <option value=100 selected = "selected">所有</option> <option value=0 {% if status == 0 %} selected = "selected" {% endif %}>在线</option> <option value=1 {% if status == 1 %} selected = "selected" {% endif %}>已下线</option> <option value=2 {% if status == 2 %} selected = "selected" {% endif %}>未知</option> <option value=3 {% if status == 3 %} selected = "selected" {% endif %}>故障</option> <option value=4 {% if status == 4 %} selected = "selected" {% endif %}>备用</option> </select> </div> <div id="box_bottom"> <div class="pagination"> <span class="current"> {% if serverlist.has_previous %} <a href="javascript:void(0)" onclick="search_server({{ serverlist.previous_page_number }});">上一页</a> {% endif %} <span class="current"> Page {{ serverlist.number }} of {{ serverlist.paginator.num_pages }}. </span> {% if serverlist.has_next %} <a href="javascript:void(0)" onclick="search_server({{ serverlist.next_page_number }});">下一页</a> {% endif %} </span> </div> <input type="button" value="查询" class="ui_input_btn01" onclick="search_server(1);"/> <input type="button" value="新增" class="ui_input_btn01" onclick="add_server();" /> <input type="button" value="删除" class="ui_input_btn01" onclick="batdel_server();" /> <input type="button" value="导出EXCEL" class="ui_input_btn01" onclick="excel_server();" /> </div> </form> </div> </div> {% endblock %} {% block content %} <div class="ui_content"> <div class="ui_tb"> <table class="table" cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> <tr> <th width="30"><input type="checkbox" id="id" name="id" /> </th> <th>主机名字</th> <th>制造商/型号</th> <th>IP</th> <th>操作系统</th> <th>CPU</th> <th>内存</th> <th>硬盘</th> <th>状态</th> <th>机房</th> <th>操作</th> </tr> {% for s in serverlist.object_list %} <tr> <td><input type="checkbox" name="idcheck" value={{ s.id }} class="acb" /></td> <td>{{ s.hostname }}</td> <td>{{ s.model }}</td> <td>{{ s.ip }}</td> <td>{{ s.os }}</td> <td>{{ s.cpu }}</td> <td>{{ s.memory }}</td> <td>{{ s.disk }}</td> <td>{% if s.status == 0 %} 在线 {% elif s.status == 1 %} 已下线 {% elif s.status == 2 %} 未知 {% elif s.status == 3 %} 故障 {% elif s.status == 4 %} 备用 {% endif %} </td> <td>{{ s.machinaroom.name }}</td> <td> <a href="javascript:void(0)" onclick="edit_server('{{ s.id }}')" class="edit">编辑</a> <a href="javascript:void(0)" onclick="del_server({{ s.id }},{{ serverlist.number }});">删除</a> </td> </tr> {% endfor %} </table> </div> </div> </div> <script type="text/javascript"> function search_server(page){ var mname = document.getElementById("mname").value; var sname = document.getElementById("sname").value; var ip= document.getElementById("ip").value; var os= document.getElementById("os").value; var status = document.getElementById("status").value; var myurl="search_server.html"+"?"+"mname="+mname+"&&sname="+sname+"&&ip="+ip+"&&os="+os+"&&status="+status+"&&page="+page; window.location.assign(encodeURI(myurl)) } function add_server(){ var width = 400; var height = 500; var left = parseInt((screen.availWidth/2) - (width/2));//屏幕居中 var top = parseInt((screen.availHeight/2) - (height/2)); var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top; newWindow = window.open("add_server.html", "subWind", windowFeatures); } function edit_server(id){ var width = 400; var height = 500; var left = parseInt((screen.availWidth/2) - (width/2));//屏幕居中 var top = parseInt((screen.availHeight/2) - (height/2)); var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top; newWindow = window.open("edit_server.html?id="+id, "subWind", windowFeatures); } function del_server(id,page){ if(window.confirm('确定要删除该记录吗?')){ var text1= document.getElementById("mname").value; var sname=document.getElementById("sname").value; var ip=document.getElementById("ip").value; var os=document.getElementById("os").value; var status=document.getElementById("status").value; var myurl="del_server.html"+"?"+"id="+id+"&&mname="+text1+"&&page="+page+"&&ip="+ip+"&&os="+os+"&&status="+status+"&&sname="+sname; window.location.assign(encodeURI(myurl)) return true; }else{ //alert("取消"); return false; } } function batdel_server(){ if(window.confirm('确定要删除记录吗?')){ obj = document.getElementsByName("idcheck"); var text1= document.getElementById("mname").value; var sname=document.getElementById("sname").value; var ip=document.getElementById("ip").value; var os=document.getElementById("os").value; var status=document.getElementById("status").value; check_val = []; for(k in obj){ if(obj[k].checked) check_val.push(obj[k].value); } var myurl="batdel_server.html"+"?"+"ids="+check_val+"&&mname="+text1+"&&ip="+ip+"&&os="+os+"&&status="+status+"&&sname="+sname; window.location.assign(encodeURI(myurl)) return true; }else{ return false; } } function excel_server(){ var text1 = document.getElementById("mname").value; var sname=document.getElementById("sname").value; var ip=document.getElementById("ip").value; var os=document.getElementById("os").value; var status=document.getElementById("status").value; var myurl="excel_server.html"+"?mname="+text1+"&&ip="+ip+"&&os="+os+"&&status="+status+"&&sname="+sname; window.location.assign(encodeURI(myurl)) } </script> {% endblock %} cmdbapp/serverviews.py -- coding: utf-8 -- from future import unicode_literals from django.shortcuts import render,render_to_response from django.core.paginator import Paginator,InvalidPage,EmptyPage from cmdbapp.models import * from django.http import HttpResponse from django.http import HttpResponseRedirect from xlwt import * import StringIO def search_server(request): error = False each_page = 8 mname=request.GET.get('mname','').strip() sname=request.GET.get('sname','').strip() ip=request.GET.get('ip','').strip() os=request.GET.get('os','').strip() status=int(request.GET.get('status',100)) if mname=='' and sname=='' and ip=='' and os=='' and status==100: record_list = Server.objects.all() paginator = Paginator(record_list,each_page) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('search_server.html',{'serverlist':contacts,"mname":mname,"sname":sname,"ip":ip,"os":os,"status":status}) else: q={} if mname!='' and sname=='' and ip=='' and os=='' and status==100: a=Machinaroom.objects.filter(name__icontains=mname).values("id") q['machinaroom__in']=a if sname!='': q['hostname__icontains']=sname if ip!='': q['ip__icontains']=ip if os!='': q['os__icontains']=os if status!=100: q['status']=status record_list = Server.objects.filter(**q) paginator = Paginator(record_list,each_page) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 try: contacts = paginator.page(page) except (EmptyPage, InvalidPage): contacts = paginator.page(paginator.num_pages) return render_to_response('search_server.html',{'serverlist':contacts,"mname":mname,"sname":sname,"ip":ip,"os":os,"status":status}) def add_server(request): if request.method=='GET': objs=Machinaroom.objects.all() return render_to_response("add_server.html",{"machinaroomlist":objs}) else: hostname=request.POST.get("serverhostname","") model=request.POST.get("servermodel","") ip=request.POST.get("serverip","") os=request.POST.get("serveros","") cpu=request.POST.get("servercpu","") memory=request.POST.get("servermemory","") disk=request.POST.get("serverdisk","") status=request.POST.get("serverstatus",0) machinaroomid=request.POST.get("servermachinaroom") machinaroom=Machinaroom.objects.get(id=int(machinaroomid)) uu=Server(hostname=hostname,model=model,ip=ip,os=os,cpu=cpu,memory=memory,disk=disk,status=status,machinaroom=machinaroom) uu.save() return HttpResponseRedirect("add_server.html") def edit_server(request): if request.method=='GET': obj=Server.objects.get(id=int(request.GET.get('id'))) objs=Machinaroom.objects.all() return render_to_response('edit_server.html',{'server':obj,'machinaroomlist':objs}) else: id=request.POST.get("id") hostname=request.POST.get("serverhostname","") model=request.POST.get("servermodel","") ip=request.POST.get("serverip","") os=request.POST.get("serveros","") cpu=request.POST.get("servercpu","") memory=request.POST.get("servermemory","") disk=request.POST.get("serverdisk","") status=request.POST.get("serverstatus",0) machinaroomid=request.POST.get("servermachinaroom") machinaroom=Machinaroom.objects.get(id=int(machinaroomid)) uu=Server.objects.filter(id=id).update(hostname=hostname,model=model,ip=ip,os=os,cpu=cpu,memory=memory,disk=disk,status=status,machinaroom=machinaroom) return HttpResponseRedirect("edit_server.html?id="+id) def del_server(request): id=request.GET.get('id') iid=int(id) Server.objects.filter(id=iid).delete() mname=request.GET.get('mname','').strip() sname=request.GET.get('sname','').strip() ip=request.GET.get('ip','').strip() os=request.GET.get('os','').strip() status=request.GET.get('status',100) page=request.GET.get('page','1') return HttpResponseRedirect('search_server.html?mname='+mname+"&&page="+page+"&&sname="+sname+"&&ip="+ip+"&&os="+os+"&&status="+status) def batdel_server(request): ids=request.GET.get('ids') b=ids.split(',') arr = map(int,b) for aaa in arr: Server.objects.filter(id=aaa).delete() mname=request.GET.get('mname') sname=request.GET.get('sname','').strip() ip=request.GET.get('ip','').strip() os=request.GET.get('os','').strip() status=request.GET.get('status',100) return HttpResponseRedirect('search_server.html?mname='+mname+"&&sname="+sname+"&&ip="+ip+"&&os="+os+"&&status="+status) def excel_server(request): mname=request.GET.get('mname','').strip() sname=request.GET.get('sname','').strip() ip=request.GET.get('ip','').strip() os=request.GET.get('os','').strip() status=int(request.GET.get('status',100)) if mname=='' and sname=='' and ip=='' and os=='' and status==100: list_obj = Server.objects.all() else: q={} if mname!='' and sname=='' and ip=='' and os=='' and status==100: a=Machinaroom.objects.filter(name__icontains=mname).values("id") q['machinaroom__in']=a if sname!='': q['hostname__icontains']=sname if ip!='': q['ip__icontains']=ip if os!='': q['os__icontains']=os if status!=100: q['status']=status list_obj = Server.objects.filter(**q) if list_obj: # 创建工作薄 ws = Workbook(encoding='utf-8') w = ws.add_sheet(u"服务器清单") w.write(0, 0, "id") w.write(0, 1, u"主机名字") w.write(0, 2, u"制造商/型号") w.write(0, 3, u"IP") w.write(0, 4, u"操作系统") w.write(0,5,u"CPU") w.write(0,6,u"内存") w.write(0,7,u"硬盘") w.write(0,8,u"状态") w.write(0,9,u"机房") # 写入数据 excel_row = 1 for obj in list_obj: data_id = obj.id data_hostname = obj.hostname data_model = obj.model data_ip = obj.ip data_os = obj.os data_cpu=obj.cpu data_memory=obj.memory data_disk=obj.disk if obj.status == 0: data_status='在线' elif obj.status == 1: data_status='已下线' elif obj.status == 2: data_status='未知' elif obj.status == 3: data_status='故障' else: data_status='备用' data_machinaroom=obj.machinaroom.name w.write(excel_row, 0, data_id) w.write(excel_row, 1, data_hostname) w.write(excel_row, 2, data_model) w.write(excel_row, 3, data_ip) w.write(excel_row, 4, data_os) w.write(excel_row, 5, data_cpu) w.write(excel_row, 6, data_memory) w.write(excel_row, 7, data_disk) w.write(excel_row, 8, data_status) w.write(excel_row, 9, data_machinaroom) excel_row += 1 sio = StringIO.StringIO() ws.save(sio) sio.seek(0) response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=服务器清单-'+mname+sname+ip+os+'.xls' response.write(sio.getvalue()) return response

优秀的个人博客,低调大师

搭建fabric-sample/balance-transfer网络详解

1.需要的文件 fabric的docker镜像文件 docker-compose.yaml文件 fabric-client的index.d.ts、fabric-ca-client的index.d.ts artifacts文件夹 2.docker-compose.yaml文件 docker-compose.yaml,主要是用来配置和启动多个节点,其中有4个fabric-peer节点、2个fabric-ca-server节点、1个fabric-orderer节点。 3.artifacts文件夹 crypto-config文件夹,是由cryptogen generate --config=./crypto-config.yaml生成。 genesis.block文件,是由configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./genesis.block生成,配置文件是configtx.yaml。 mychannel.tx文件,是由configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./mychannel.tx -channelID mychannel生成。

优秀的个人博客,低调大师

利用 ELK 搭建 Docker 容器化应用日志中心

概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析。典型的比如SpringBoot应用的日志收集。 本文即将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其架构如下图所示: 架构图 镜像准备 ElasticSearch镜像 Logstash镜像 Kibana镜像 Nginx镜像(作为容器化应用来生产日志) 开启Linux系统Rsyslog服务 修改Rsyslog服务配置文件: vim /etc/rsyslog.conf 开启下面三个参数: $ModLoad imtcp$InputTCPServerRun 514 @@localhost:4560 开启3个参数 意图很简单:让Rsyslog加载imtcp模块并监听514端口,然后将Rsyslog中收集的数

优秀的个人博客,低调大师

Selenium + Python + Chrome 自动化测试 环境搭建

一、下载Python 相关的教程很多,此处不详细记录了,下面是官网下载地址: https://www.python.org/downloads/ 我使用的python版本为 Python 3.6.1 注意:下载完成后配置python和pip的环境变量 二、下载Selenium 如果环境变量配置成功,在命令提示符下输入以下指令即可安装 pip install -U selenium 出现 Successfully 表示下载成功 三、下载对应驱动 官网(需要科学上网): https://sites.google.com/a/chromium.org/chromedriver/downloads 第三方: https://npm.taobao.org/mirrors/chromedriver 下载后放至 "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" 并添加环境变量 四、运行Python # -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com') 注意:此处运行后我报了有关driver的错误,理论上应该配了环境变量就可以了,但是配置了还是有错,最后的方法是将下载的driver放到与python文件相同的目录下 成功运行后可以自动打开百度的首页,就代表环境配置成功啦!

优秀的个人博客,低调大师

Appium+Python3+iOS真机环境搭建

前言: Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。 本次环境配置相关: macOS:10.13.4 Appium-desktop:1.6.1 Xcode:9.3.1 一、环境配置 1、 安装homebrew: $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2、 安装libimobiledevice: $ brew install libimobiledevice --HEAD 3、 安装carthage: $ brew install carthage 4、安装node: $ brew install node 5、安装npm: $ brew install npm 6、安装ios-deploy: $ npm install -g ios-deploy 8、安装xcpretty: $ gem install xcpretty 9、安装appium,appium-doctor 进入官网,下载Appium-1.6.1.dmg,安装即可。 当然你可以使用命令:npm install -g appium来安装appium,但是后面就会各种报错!!(别问我是怎么知道的,我搞了2天。) $ npm install -g appium-doctor 10、使用appium-doctor 检查Appium iOS环境环境 appium-doctor --ios info AppiumDoctor Appium Doctor v.1.4.3 info AppiumDoctor ### Diagnostic starting ### info AppiumDoctor The Node.js binary was found at: /usr/local/bin/node info AppiumDoctor Node version is 10.1.0 info AppiumDoctor Xcode is installed at: /Applications/Xcode.app/Contents/Developer info AppiumDoctor Xcode Command Line Tools are installed. info AppiumDoctor DevToolsSecurity is enabled. info AppiumDoctor The Authorization DB is set up properly. info AppiumDoctor Carthage was found at: /usr/local/bin/carthage info AppiumDoctor HOME is set to: /Users/wangjuan info AppiumDoctor ### Diagnostic completed, no fix needed. ### info AppiumDoctor info AppiumDoctor Everything looks good, bye! info AppiumDoctor 二、安装WebDriverAgent 1、进入appium安装目录下WebDriverAgent文件夹,具体路径参照自己的路径,可以通过find命令查找 cd /Applications/Appium.app/Contents/Resources/app /node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent 2、在WebDriverAgent目录下执行以下命令 mkdir -p Resources/WebDriverAgent.bundle sh ./Scripts/bootstrap.sh 3、编译WebDriverAgent.xcodeproj Xcode打开当前目录下的WebDriverAgent.xcodeproj文件 WebDriverAgent.xcodeproj.png 注意️:进入项目后要编辑一些内容,请无比按照步骤全部修改。步骤见下图!! 1、TARGETS->WebDriverAgentLib的Bundle Identifier更改为自己命名的Identifier。(所有Identifier注意保持一致!!) 2、TARGETS->WebDriverAgentLib的Signing选择使用个人的证书。 image.png 3、TARGETS->WebDriverAgentRunner的Signing选择使用个人的证书。 image.png 4、PROJECT->WebDriverAgent的Product Bundle Identifier更改为自己命名的Identifier。(所有Identifier注意保持一致!!) image.png 5、TARGETS->WebDriverAgentLib的Product Bundle Identifier更改为自己命名的Identifier。(所有Identifier注意保持一致!!) image.png 6、TARGETS->WebDriverAgentRunner的Product Bundle Identifier更改为自己命名的Identifier。(所有Identifier注意保持一致!!) image.png 7、Device选择已连接的测试机 8、点击build按钮来测试,按照步骤设置后,可build succeeded~ image.png 9、测试机上安装证书,执行以下命令: xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=测试机的udid' test 如果没有报错证明安装成功,同时手机上会安装一个WebDriverAgent软件。需要在手机设置->通用->设备管理->信任开发者。如下图: image.png image.png 三、Appium Client端 Appium Client有Ruby,Python,Java三个版本,可自行选择自己喜欢的安装即可,本次只针对Python版安装: pip install Appium-Python-Client 以上,接下来可以定位元素,推荐使用App Inspector,开始iOS自动化之旅吧~~

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册