Django学习之django配置vue完成数据库数据的excel形式的文件下载
将数据库中的数据写入excel文件并下载的流程梳理
后端实现
后台url.py
urlpatterns = [....
re_path('^host/host_excel/', views.HostExcelView.as_view()),
]
后台视图views.py
class HostExcelView(APIView):# 下载host数据excel文件
def get(self,request):
#1 读取数据库数据
all_host_data = models.Host.objects.all().values('id', 'category', 'hostname', 'ip_addr', 'port', 'username','desc', 'evrironments')
print(all_host_data)
# 2 写入excel并保存
# 关于excel的操作,参考我的博客
# 创建excel
ws = xlwt.Workbook(encoding='utf-8')
# 创建工作簿
st = ws.add_sheet('主机数据')
# 写标题行
st.write(0, 0, 'id')
st.write(0, 1, 'category')
st.write(0, 2, 'hostname')
st.write(0, 3, 'ip_addr')
st.write(0, 4, 'port')
st.write(0, 5, 'username')
st.write(0, 6, 'desc')
st.write(0, 7, 'evrironments')
# 写入数据,从第一行开始
excel_row = 1
for host_obj in all_host_data:
st.write(excel_row, 0, host_obj.get('id'))
st.write(excel_row, 1, host_obj.get('category'))
st.write(excel_row, 2, host_obj.get('hostname'))
st.write(excel_row, 3, host_obj.get('ip_addr'))
st.write(excel_row, 4, host_obj.get('port'))
st.write(excel_row, 5, host_obj.get('username'))
st.write(excel_row, 6, host_obj.get('desc'))
st.write(excel_row, 7, host_obj.get('evrironments'))
excel_row += 1
# sio = BytesIO()
# 将数据写入io数据流,不用在本地生成excel文件,不然效率就低了
sio = BytesIO()
ws.save(sio)
sio.seek(0)
# print(sio.getvalue())
#3 将excel数据响应回客户端
response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel')
# response['Content-Disposition'] = 'attachment; filename=xx.xls'
# 文件名称中文设置
from django.utils.encoding import escape_uri_path
response['Content-Disposition'] = 'attachment; filename={}'.format(escape_uri_path('主机列表数据.xls'))
response.write(sio.getvalue()) #必须要给response写入一下数据,不然不生效
return response
前端vue实现
其实不管是不是vue,都可以,因为就是一个a标签就能搞定
<a style="color:#fff;" href="http://api.hippo.com:8000/host/host_excel/"> 导出主机列表数据</a>注意:href属性的值,是你要访问的后台路径
以上是 Django学习之django配置vue完成数据库数据的excel形式的文件下载 的全部内容, 来源链接: utcz.com/z/377457.html