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

相关文章

来自专栏Golang语言社区

配置文件热加载的go语言实现

通常我们更新应用程序的配置文件,都需要手动重启程序或手动重新加载配置。假设一组服务部署在10台机器上,你需要借助批量运维工具执行重启命令,而且10台同时重启可能...

2855
来自专栏WindCoder

Eclipse常用配置

或者ALT+SHIFT +W ,在弹出的菜单中选择System Explorer 

541
来自专栏乐沙弥的世界

基于Innobackupex的增备及恢复

    MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用。增量备份主要是以全备或增量备份为基础,备份那些变更过的页...

552
来自专栏跟着阿笨一起玩NET

分享一些WinForm数据库连接界面UI

3、代码生成器:http://www.csharpwin.com/csharpspace/11666r2577.shtml

831
来自专栏草根专栏

用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)

为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库. 可以在项目里面建立一个database.sql, 并且...

2945
来自专栏腾讯IVWEB团队的专栏

PhantomJS 基础及示例

PhantomJS 是一个无界面的 webkit 内核浏览器,你可以把它当作一个没有界面的 Safari 。本文介绍了一些相关的基础知识。

5.2K0
来自专栏小特工作室

1分钟生成Net对象的注释

      我们在开发过程中,肯定会有几个项目作为基础项目,存放一些比较常用的类和方法,供其他项目使用.一般来说,方法实现以后,就不想再去管它了,以致于新加入的...

1726
来自专栏Java3y

Servlet第四篇【request对象常用方法、应用】

什么是HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所...

4035
来自专栏Java帮帮-微信公众号-技术文章全总结

solr使用教程【面试+工作】

solr使用教程一【面试+工作】 Solr调研总结 开发类型全文检索相关开发 Solr版本4.2文件内容本文介绍solr的功能使用及相关注意事项;主要包括以下内...

2.2K6
来自专栏林德熙的博客

Latex 论文elsevier,手把手如何用Latex写论文

这几天在开始写论文,准备发的是elsevier,这个网站的instruction有问题,下载的东西基本上好多的错误,所以我就写博客记录。

1461

扫码关注云+社区