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 条评论
登录 后参与评论

相关文章

来自专栏信安之路

RedTeam 技巧集合

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

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

vue-cli的项目结构

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

2594
来自专栏吴柯的运维笔记

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

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

44913
来自专栏Danny的专栏

学习中遇到的小技巧 一(暂停更新)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1132
来自专栏ASP.NETCore

.Net Core迁移到MSBuild平台(二)

在上一篇文章.Net Core迁移到MSBuild的多平台编译问题中,简单的讲了下新的项目配置文件中的节点配置,这篇我将用一些例子来详细讲下从project.j...

1392
来自专栏Eugene's Blog

黑客常用的扫描器盒子分类目录文章标签友情链接联系我们

3089
来自专栏Thinks

你的第一个渐进式网站应用(5)

渐进式网站应用会很快启动并马上可用。在目前的状态中(step-04),我们的天气app启动很快,但是不可用。因为还木有数据。 我们要使用一个AJAX请求去获取数...

863
来自专栏区块链技术专栏

EOS 权限管理之-权限的使用 (你绝对找不到的干货)

相信看这篇教程的人,对我之前的一些账户操作已经进行了了解,如果不了解的,可以移步 https://eosfans.io/topics/372.

8373
来自专栏王二麻子IT技术交流园地

Javascript实现简单跨域调用

什么是JSONP? 1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,...

3409
来自专栏令仔很忙

新手学Struts(一)----JSP+Servlet讲解MVC实现原理

最近在学SSH(Struts+ Hibernate+Spring),这也算是一个比较经典的框架了,之前都是看人家大牛说这个框架,那个框架,说的真溜,自己也是佩...

1313

扫码关注云+社区

领取腾讯云代金券