前端代码:

<template>
<!--  通过按钮的方式来下载文件做测试-->
  <el-button plain  @click="getEventDay()">数据导出</el-button>
</template>

<script>
import axios from 'axios'
export default {
  data () {
    return {
    }
  },
  methods: {
    // 调用的方法
    async getEventDay () {
      axios({
        // axios访问的方式,url地址,以及response的流格式,设置为blob这一步十分重要
        method: 'post',
        url: 'http://127.0.0.1:8000/api/event_day/',
        responseType: 'blob'
      }).then(res => {
        // 获取头文件中的内容为了读取后端发送文件的文件名
        var disposition = res.headers['content-disposition']
        var fileName = decodeURI(disposition.substring(disposition.indexOf('filename=') + 9, disposition.length))
        // 创建blob流并将数据添加进去,根据不同类型文件设置不同的type,excel就设置这种type就可以了
        const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) // 假设文件为pdf
        // 创建组件并点击,地址为流地址,之后销毁掉
        const link = document.createElement('a')
        link.href = window.URL.createObjectURL(blob)
        link.download = fileName
        link.click()
        link.remove()
      }).catch(err => {
        var enc = new TextDecoder('utf-8')
        var res = enc.decode(new Uint8Array(err.data)) // 转化成json对象
        console.log(res)
      })
    }
  }
}
</script>

<style scoped>

</style>

python+django后端代码

from openpyxl import Workbook
from urllib.parse import quote

def event_day(request):
# django里面的特定调用数据库的方法
        report = ReportForm.objects.all()
        #创建对象
        wb = Workbook()
        #起文件名字
        dest_filename = '日报'
        #创建sheet
        ws1 = wb.active
        ws1.title = "dayilyCount"
        #给excel的单元格填写内容
        ws1.cell(1, 1, 'id')
        ws1.cell(1, 2, '1234')
        ws1.cell(1, 3, '事件类型')
        ws1.cell(1, 4, '备注')
        row = 2
        col = 1
        for rep in report:
            ws1.cell(row, col, rep.id) //这里的字段一定要和数据表里对应
            ws1.cell(row, col + 1, rep.time)
            ws1.cell(row, col + 2, rep.type)
            ws1.cell(row, col + 3, rep.payload)
            row = row + 1
#返回内容
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', charset='utf-8')
        response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(str(dest_filename)))
        response['Access-Control-Expose-Headers'] = 'Content-Disposition'
        wb.save(response)
        return response
 

数据表:model

class ReportForm(models.Model):
    time=models.DateField(verbose_name='日期',auto_now_add=true)
    type=models.CharField(verbose_name='类型',max_length=255)
    payload=models.CharField(verbose_name='下载信息',max_length=32)

数据库数据:

 导出后效果:

 

以上就是简单的把数据库数据导出到本地的过程,代码可以直接复制。 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐