django xlwt实现资产导出功能

做个记录 views

import xlwt
class ExAssetView(LoginRequiredMixin,View):
    def get(self,request):
        row = 1
        style_heading = xlwt.easyxf("""
                font:
                    name Arial,
                    colour_index white,
                    bold on,
                    height 0xA0;
                align:
                    wrap off,
                    vert center,
                    horiz center;
                pattern:
                    pattern solid,
                    fore-colour ocean_blue;
                borders:
                    left THIN,
                    right THIN,
                    top THIN,
                    bottom THIN;
                """)
        style_body = xlwt.easyxf("""
                font:
                    name Arial,
                    bold off,
                    height 0XA0;
                align:
                    wrap on,
                    vert center,
                    horiz left;
                borders:
                    left THIN,
                    right THIN,
                    top THIN,
                    bottom THIN;
                """)
        fmts = [
            'M/D/YY',
            'D-MMM-YY',
            'D-MMM',
            'MMM-YY',
            'h:mm AM/PM',
            'h:mm:ss AM/PM',
            'h:mm',
            'h:mm:ss',
            'M/D/YY h:mm',
            'mm:ss',
            '[h]:mm:ss',
            'mm:ss.0',
        ]

        style_green = xlwt.easyxf(" pattern: pattern solid,fore-colour 0x11;")
        style_red = xlwt.easyxf(" pattern: pattern solid,fore-colour 0x0A;")
        style_body.num_format_str = fmts[0]
        ass_all = Asset.objects.all()
        response = HttpResponse(content_type='application/vnd.ms-excel')#这里响应对象获得了一个特殊的mime类型,告诉浏览器这是个exell文件不是html
        response['Content-Disposition'] = 'attachment; filename=asset'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.xls'#这里响应对象获得了附加的Content-Disposition协议头,它含有excel文件的名称,文件名随意,当浏览器访问它时,会以"另存为"对话框中使用它
        f = xlwt.Workbook()  # 创建工作簿
        sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheet
        # sheet1.write(0, 1, label='内网ip', style_heading)
        sheet1.write(0, 0, '主机名', style_heading)
        sheet1.write(0, 1, '内网ip', style_heading)
        sheet1.write(0, 2, '外网ip', style_heading)
        sheet1.write(0, 3, '端口', style_heading)
        sheet1.write(0, 4, '总内存', style_heading)
        sheet1.write(0, 5, '总磁盘', style_heading)
        sheet1.write(0, 6, 'CPU型号', style_heading)
        sheet1.write(0, 7, 'CPU核数', style_heading)
        sheet1.write(0, 8, '系统版本', style_heading)
        sheet1.write(0, 9, '系统发行版本', style_heading)
        sheet1.write(0, 10, 'DNS', style_heading)
        sheet1.write(0, 11, 'MAC地址', style_heading)
        sheet1.write(0, 12, '内核版本', style_heading)
        sheet1.write(0, 13, '序列号', style_heading)
        sheet1.write(0, 14, '虚拟化', style_heading)
        sheet1.write(0, 15, '状态', style_heading)
        sheet1.write(0, 16, '系统用户', style_heading)
        sheet1.write(0, 17, '产品线', style_heading)
        sheet1.write(0, 18, '标签', style_heading)
        sheet1.write(0, 19, '云平台', style_heading)
        sheet1.write(0, 20, '创建用户', style_heading)
        sheet1.write(0, 21, '备注', style_heading)
        sheet1.write(0, 22, '创建时间', style_heading)
        sheet1.write(0, 23, '更新时间', style_heading)
        for ass in ass_all:
            sheet1.write(row, 0, ass.hostname)
            sheet1.write(row, 1, ass.inner_ip)
            sheet1.write(row, 2, ass.pub_ip)
            sheet1.write(row, 3, ass.port)
            sheet1.write(row, 4, ass.mem_total)
            sheet1.write(row, 5, ass.disk_total)
            sheet1.write(row, 6, ass.cpu_model)
            sheet1.write(row, 7, ass.num_cpus)
            sheet1.write(row, 8, ass.osfinger)
            sheet1.write(row, 9, ass.osrelease)
            sheet1.write(row, 10, ass.dns)
            sheet1.write(row, 11, ass.mac_addr)
            sheet1.write(row, 12, ass.kernelrelease)
            sheet1.write(row, 13, ass.serialnumber)
            sheet1.write(row, 14, ass.virtual)
            if ass.status == '正常':

                sheet1.write(row, 15, ass.status,style_green)
            else:
                sheet1.write(row, 15, ass.status, style_red)

            sheet1.write(row, 16, ass.system_user.name + '--' + ass.system_user.username)
            sheet1.write(row, 17, ass.product.name)
            for tags in ass.tag.all():
                sheet1.write(row, 18, tags.name)
            sheet1.write(row, 19, ass.cloud_platform.cloud)
            sheet1.write(row, 20, ass.create_user)
            sheet1.write(row, 21, ass.detail)
            sheet1.write(row, 22, str(ass.create_time), style_body)
            sheet1.write(row, 23, str(ass.update_time), style_body)

            row += 1
        f.save(response)#写入表格
        return response

urls

from  .views import ExAssetView
 # 资产导出
app_name = 'asset'
urlpatterns = [
url(r'ex_asset/$', ExAssetView.as_view(), name='ex_asset'),
]

前端模板

  <a class="btn btn-default btn_import" data-toggle="modal" data-target="#user_import_modal"
                       tabindex="0">
                        <span><a href="{% url 'asset:ex_asset' %}" class="btn btn-primary btn-sm" type="button">导出</a></span>
                    </a>

导出表格样式

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴柯的运维笔记

Linux下监控软件Zabbix安装部署教学

“每个理性的IT人士都置顶了吴柯的运维笔记” 1.部署LNMP环境 安装php Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3...

40413
来自专栏有趣的Python

程序员装机必备爆款软件推荐与配置(windows版)

做机也要做一只全能的机哦 值此新年来临之即,面对两百多个G的c盘。忍痛割爱将电脑系统重装,版本为(win10:1079)之后的所有电脑环境更新,专业软件安装均会...

4083
来自专栏拂晓风起

cocos2d-js 调试办法 断点调试 Android真机调试

1552
来自专栏眯眯眼猫头鹰的小树杈

vue-cli的项目结构

这篇文章对纯新手友好,所以有过任何vue开发经验的人可以出门左转啦!这篇文章献给我的homie苏蕾儿童鞋,让她在学习vue项目的时候少走一点弯路(径直冲向末路哈...

1794
来自专栏信安之路

RedTeam 技巧集合

1、利用目标用户使用的 user agent 来隐藏自身的恶意流量,比如像 Outlook 软件的 UA。

1282
来自专栏移动开发面面观

okhttp使用备忘录

1194
来自专栏大内老A

我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace

无论对于Web Service还是WCF,Client和Service之间交互的唯一形式是通过发送和接收Soap Message。在我们对Web Service...

2007
来自专栏程序员与猫

常见的Web实时消息交互方式和SignalR

标签: WebSocket SignalR 前言 最近因为项目中涉及到了实时数据的传输,特地去了解了一下当前Web应用中常见的实时交互手段,当然一开始也不仅限于...

4665
来自专栏wujianqinjian的云

腾讯云API弹性公网IP踩坑

由于自己管理的云服务器数量比较多,时不时需要更换IP,在管理台上一下下点击,实在浪费时间,于是就想到了通过API调用的方式,将更换IP一系列动作,全部集成到Py...

3.7K0
来自专栏NetCore

Catalog Service - 解析微软微服务架构eShopOnContainers(三)

上一篇我们说了Identity Service,因为其基于IdentityServer4开发的,所以知识点不是很多,今天我们来看下Catalog Service...

2778

扫码关注云+社区