首页 文章 精选 留言 我的

精选列表

搜索[Skill资产共创],共8446篇文章
优秀的个人博客,低调大师

推动开源鸿蒙RN版本演进与性能优化 共创跨平台体验新标杆

10月24日,在QCon全球软件开发大会上海站的 HarmonyOS 开发者技术分论坛上,华为终端BG软件主任工程师带来了《开源鸿蒙 React Native 性能体验提升实践与思考》的主题分享,深入解析了开源鸿蒙React Native(RN)版本的最新进展,以及在性能和负载优化方面的实践探索。 开源鸿蒙RN版本快速演进,助力应用RN业务高效商用 随着鸿蒙生态的持续壮大,开发者迎来了除 Android 与 iOS 之外的“第三种选择”。React Native(RN)作为业界广泛应用的跨平台开发框架,兼具开发效率与性能优势。推进 RN 框架的鸿蒙化适配与版本演进,将有助于开发者复用原有技术栈,快速构建高性能的鸿蒙应用,有效缓解“加入一个新生态就会增加一倍投入”的行业困境,实现“一套代码、多平台复用”的开发体验。 据华为专家介绍,依托开源鸿蒙社区平台,华为携手产业界及学术界力量共同交付RN跨平台框架的开源鸿蒙版本。通过开源共建的模式,开源鸿蒙RN版本快速迭代,能力不断完善,已支撑200多个应用RN业务商用。其中,在头部200多个鸿蒙应用中,有40多款涉及RN框架,均已全部实现商用。更多应用仍在快速、健康适配中,为鸿蒙生态的持续扩展奠定坚实基础。 多维优化路径,提升性能与能效体验 在社区伙伴的共同合力下,开源鸿蒙RN版本在性能、负载优化等方面取得了显著成效。现场,华为专家从架构设计、编译优化、系统资源调度、能效控制等多个维度进行了全方位分享。 架构层面,RN Mount 段通过 C++ 对接 ArkUI 的 C-API 接口,无跨语言流程,大幅度提升端到端性能。目前,开源鸿蒙RN各版本都已对接ArkUI C-API接口,显著提升了页面交互性能。 虚拟机侧,龙雀 JS 引擎通过三级JIT流水线优化、LLVM编译优化、Builtins PGO重排、灵活GC(暴露GC调参接口)、codecache等技术,在 V8 虚拟机的基础上实现约20%的性能提升,相比原始版 Hermes 提升更为明显,开发者只需修改两行代码即可调用。 编译器优化方面,开源鸿蒙RN通过毕昇编译器支持 LTO/PGO 等高级编译优化技术,实现 5~8% 的性能提升与 2~5% 的负载下降,RN 库产物尺寸缩小约15%。 能耗与动画方面,LTPO在开源鸿蒙 RN上已实现衰变动画、帧动画、弹跳动画等三类原生动画适配,能够降低部分动画场景手机负载,让设备不发热,更节能。未来,将在RN JS动画上使能LTPO帧率动态调整逻辑,使其根据动画速度设置帧率。 页面时延优化上,Text 组件及 Stack 等控件通过结构优化,避免无效和重复的测量动作,让页面完成时延平均降低超过100ms(benchmark测试)。目前,该措施已落地开源鸿蒙RN全部版本。 携手推进类RN框架技术演进,共同繁荣鸿蒙生态 RN 框架在开源鸿蒙的持续演进,不仅依赖华为自身的研发投入,更离不开开源社区的协同共建。未来,华为还将携手更多伙伴,在开源社区上对RN框架以及包括 Lynx、Taro、Hippy、Mach、AJX、Cube、KDS、DX、Talos、Picasso等在内的类RN框架进行技术演进的探讨,共同推进性能、负载优化方案的落地,构建开发者友好的跨平台框架生态,推动鸿蒙应用开发迈入高质量发展新阶段。

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

Databend 与海外某电信签约:共创海外电信数据仓库新纪元

海外某电信,是某国的主要国有电信服务供应商,不仅致力于为民众和企业提供全面的电信服务,还肩负着推动国家通信基础设施和信息技术进步的重任。在数字化转型的关键时期,海外某电信选择与 Databend 携手合作,开启了数据驱动业务决策的新篇章。 为什么选择 Databend 海外某电信面临的主要挑战是随着业务量的增加,传统的 Clickhouse + Hive 方案在数据存储和处理上开始显露不足。 原来的大数据分析采用的 Clickhouse + Hive 方案进行离线的实时报表。但随着业务量的上升后,Hive的数据存储压力变大,且 Hive 缺乏索引设计,导致存储压力巨大,每天需要进行大量的中转和数据比对工作。同时 Clickhouse 随着业量上升后单机已经扩容到 128c768g 的机型,对后续的扩容及弹性挑战较大。 为了应对这一挑战,Databend 以其高效、弹性、低成本的云原生数据仓库解决方案,成为了海外某电信的理想选择。Databend 的技术创新不仅提高了数据处理速度,还支持实时分析,大大增强了海外某电信的服务质量和运营效率。 Databend 是一款使用 Rust 研发、开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。 具有即时扩缩容能力,能在数分钟内增加数百倍的算力,为企业提供了一个基于对象存储、湖仓一体化、计算和存储分离的大数据管理和分析集中式平台。实现了一份数据,统一计算入口,供多用种业务使用,从而助力企业更准确地洞察业务、制定战略,很好的满足了私有化部署的不同需求。 Databend 的核心优势在于其高性能的数据处理能力和成本效益。 在 Databend 的存算分离架构下,计算节点可以根据实际需求动态调整,有效节省了资源。同时,利用 Kubernetes 的弹性伸缩能力,Databend 能够迅速适应各种业务需求和负载变化,提供了真正的实时数据处理和智能决策支持。 这次合作不仅解决了海外某电信当前的数据处理挑战,更为其长远发展奠定了坚实的基础。Databend 的先进技术使海外某电信能够从庞大的数据集中提取出更有价值的洞察,助力其更准确地洞察业务、制定战略,满足不同需求的私有化部署,这在推动某国社会经济发展中起到了不可或缺的作用。 Databend 与海外某电信的合作是双方共同迈向数据仓库技术新纪元的重要一步。这不仅标志着海外某电信在海外电信领域的重要进展,也为全球电信行业提供了一个成功的合作范例。 关于Databend Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。 👨‍💻‍Databend Cloud:https://databend.cn 📖Databend 文档:https://databend.rs/ 💻Wechat:Databend ✨GitHub:https://github.com/datafuselabs/databend

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

大咖集结,共创生态|首届AIOps社区专家团正式集结出道

近年来,在AIOps领域极速发展的背景下,IT工具、平台能力、解决方案、AI场景及可用数据集的迫切需求在各行业迸发。基于此,云智慧在2021年8月发布了AIOps社区,旨在树起一面开源旗帜,为各行业客户、用户、研究者和开发者们构建活跃的用户及开发者社区,共同贡献及解决行业难题、促进该领域技术发展。 成立近半年,社区先后开源了数据可视化编排平台-FlyFish、运维管理平台OMP、云服务管理平台-摩尔平台、Hours算法等产品。其中FlyFish斩获中国开源云联盟2021优秀开源项目奖。OMP运维管理平台入选2021 年度 OSC 中国开源项目「最受欢迎项目」榜单。并在业内首次开源了智能运维开源数据集-GAIA数据集,填补了AIOps开源集数据领域的空白。 2021年11月,云智慧正式成为中国开源云联盟成员单位,2022年1月,云智慧入选SegmentFault 思否「2021 中国技术品牌影响力企业榜单」,这一切都代表着开发者和社区对我们的认可,这也更加坚定了云智慧开源战略的决心。近日,AIOps社区联合在云原生、开源、AIOps等众多领域专家,共同成立社区专家团。 AIOps社区专家团是什么 AIOps专家团是由云智慧AIOps社区发起成立的开源技术组织,是一个汇聚开源领导者、技术领导者、社区布道者的开放组织,专家团致力于创建开放、包容的开源生态体系,让开源爱好者在社区中学有所得、让技术领袖充分发挥自身价值。 目前,我们正在邀请各行业专家入驻,一起推动AIOps在中国的落地和繁荣。如果您是在AIOps、云原生、开源、自动化运维等领域的技术领袖,或者您热衷开源文化,有多年开源项目运营、社区布道师经验。请点击下方“阅读原文”,填写表单,我们将及时和您取得联系,邀请您入驻社区专家团。 未来我们要干什么 根据GitHub 统计,预计2025 年开发者用户的数量将达到 1 亿,中国开发者数量及开源贡献度增长已成为全球最快,到 2030 年中国开发者或将成为全球最大的开源群体。 面对时代所赋予的机遇,2022年,云智慧将加码开源战略,以社区专家团为切入点,在前沿技术话题、开源治理、AIOps场景落地等领域打造一系列社区Meetup,闭门会等活动。通过社区专家团,我们将搭建技术领导者与开发者之间的沟通桥梁,让开源的力量赋能更多的开发者。 未来云智慧将继续抓住时代所给予的机遇,在各界大力支持开源运动的背景下,探索开源在中国AIOps领域里落地生根新模式,依托云智慧在AIOps领域的深厚积累,开源更多优秀的技术产品,为整个AIOps开源软件生态贡献出自己一点微不足道的力量。 专家团邀请表单链接:http://t27bk7mb4txdpwcz.mikecrm.com/SSdfnv1 云智慧AIOps社区链接:https://www.cloudwise.ai/communityPanel.html

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

斐讯与思科签署合作备忘录,共创数据时代商业蓝海

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 【51CTO.com原创稿件】斐讯数据通信技术有限公司(以下简称斐讯),一家致力于向客户提供移动终端、数据通信产品、云计算等技术设备及整体解决方案和服务的高新技术企业公司。凭借出色的产品和业绩,蝉联中国电子***,以平均每年超过200%的营收增速,在行业中稳步前进。从K2路由器、智能路由产品K3C、到斐讯智能运动手环W1、斐讯智能运动手表W2、斐讯智能体脂秤S7、斐讯智能空气检测仪悟空M1、斐讯智能空气净化器悟净A1,款款智能新品不仅质量出众,还启用 “0元购”的创新模式,从家庭常用智能硬件开始,尽***可能降低科技成果、科技产品的获得成本,让消费者见微知著,用最小的代价感受到***的智慧。 然而斐讯的发展战略远不止于此,斐讯提出了战略转型的“金三角战略”,即Smart Home、Smart Data、Smart Life。斐讯结合自身的优势和对产业的深刻洞察,结合智慧大数据产业共同打造智慧生活,从智慧家庭、到智慧大数据、再到智慧生活,是斐讯战略转型的全盘布局。 近日,斐讯-思科签约仪式在斐讯总部正式举行。双方就网络服务业务(云计算数据中心及服务器业务)开展深度合作,并签署合作备忘录。斐讯创始人顾国平表示:“斐讯基于北京、华东、华南、西南等地的数据中心,已在全国布局智慧大数据战略。此次与思科达成合作后,相信依托思科三十多年来专注于互联网领域的广泛产品及解决方案,能为斐讯建设更完善的数据中心架构,并全面提升数据中心服务能力。在斐讯全球化战略的开展过程中,思科也将成为斐讯紧密的合作伙伴,助力产品及技术的***水准发展,共同打造行业标杆。” 签约仪式 资源互补、合作共赢 斐讯创始人顾国平表示,此次跟思科合作,主要是从两个核心方面来展开:一是基础网络,希望思科的服务器、交换机这些大型骨干产品可以给斐讯提供比较安全可靠的解决方案。 二是云计算的安全。斐讯希望思科可以帮助其在云计算安全方面构建一个好的体系。 除了已经成熟的北京、上海和广州这些数据中心之外,其他数据中心如遵义、重庆、成都、丽江、南宁等大型数据中心都在逐步建设中,这些数据中心节点布局将采用思科业界领先的数据中心解决方案产品和服务,从顶层设计方面提升数据中心建设的高度和纬度,从基础设施方面搭建更具安全稳定的数据中心架构,打造行业标杆,加速行业创新,推动斐讯CDC业务在2018年再创骄人业绩。 思科大中华区资深副总裁倪殿令先生则表示,思科将利用先进技术和解决方案,并且结合思科在全球领先的创新实践以及市场洞察,致力于与中国本土企业在大数据、互联网+、人工智能等先进领域的合作,为客户创造更高的价值。希望与斐讯的这次合作, 能为发展数字中国添砖加瓦。 从左至右依次:斐讯CEO王佳彬 斐讯创始人顾国平 思科大中华区资深副总裁倪殿令 与思科携手,布局海外市场 说到海外布局,顾国平表示,斐讯在海外布局的步伐还是比较大的。在北美、在欧洲斐讯都已有布局,斐讯正在慕尼黑建设比较大型的数据中心,希望全球知名的公司给斐讯提供技术支撑和产品保障。顾国平还透露,今年3月9日斐讯的发布会,将发布斐讯海外策略。 将区块链技术融入到生活场景 区块链作为当今的热点,引得众多拥有技术与实力的厂商加入。斐讯更是将区块链技术融入到生活场景。在顾国平看来,斐讯进军区块链有三大优势:技术创新能力、持续增长的用户数量、成熟的数据中心布局。 斐讯在区块链方面已经有了明确的布局,将推出跟区块链有关系的一些产品,这些产品首先聚焦在普通的产品上,斐讯首款运用区块链技术的产品斐讯天天链N1将于近日面世。 【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】 【责任编辑: 赵立京 TEL:(010)68476606】

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

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'), ]

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

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

Spring

Spring

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

Sublime Text

Sublime Text

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

用户登录
用户注册