django怎么实现通过前端按钮,将数据库中的数据生成xls文件,并可以下载到指定路径
时间: 2023-12-14 10:36:42 浏览: 81
在django项目中导出数据到excel文件并实现下载的功能
5星 · 资源好评率100%
你可以使用Python的第三方库`xlwt`来实现将数据生成xls文件,并通过Django提供的HttpResponse实现下载到指定路径的功能。具体实现步骤如下:
1. 在Django的views.py文件中编写视图函数,该函数接受前端请求,将数据库中的数据生成xls文件并返回给前端进行下载。
```python
import xlwt
from django.http import HttpResponse
def download_xls(request):
# 从数据库获取数据
data = YourModel.objects.all()
# 创建xls文件
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('Sheet1')
# 写入表头
ws.write(0, 0, '字段1')
ws.write(0, 1, '字段2')
ws.write(0, 2, '字段3')
# 写入数据
row = 1
for item in data:
ws.write(row, 0, item.field1)
ws.write(row, 1, item.field2)
ws.write(row, 2, item.field3)
row += 1
# 将xls文件保存到内存中
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="data.xls"'
wb.save(response)
return response
```
2. 在Django的urls.py文件中定义该视图函数的URL路由。
```python
from django.urls import path
from . import views
urlpatterns = [
path('download_xls/', views.download_xls, name='download_xls'),
]
```
3. 在前端页面中添加一个按钮,并通过JavaScript来实现点击按钮时向后端发送请求进行下载。
```html
<button id="download-btn">下载数据</button>
<script>
document.getElementById('download-btn').addEventListener('click', function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/download_xls/');
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status === 200) {
var blob = new Blob([this.response], { type: 'application/vnd.ms-excel' });
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'data.xls';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
};
xhr.send();
});
</script>
```
这样,用户点击前端页面上的下载按钮后,将会向后端发送GET请求,后端将生成xls文件并返回给前端进行下载。xls文件保存在指定路径下,由于HttpResponse已经设置了Content-Disposition为attachment,所以浏览器会自动下载该文件。
阅读全文