一. 需求說明
在實際項目中,有一種需求是這樣的:對於web頁面顯示的數據,業務人員需要將其下載到本地使用。針對這一需求,這里結合Django進行實現。
二. 后台實現的主要代碼
# python3.6+Django1.6
import csv
import time
from django.http import HttpResponse
def students(request):
# 根據條件查詢相關數據
stu_lis = models.Student.objects.all()
# stus_lis = models.Student.objects.all().value_list('name', 'age', 'addr')
response = HttpResponse(content_type='text/csv', charset='GBK')
# 自定義文件名
time_now = time.strftime('%Y%m%d')
filename = 'students_' + time_now
# 添加header,attachment表示以附件方式下載
response['Content-Disposition'] = f'attachment; filename="{filename}.csv"'
# 生成一個對象
writer = csv.writer(response)
# 定義表頭
writer.writerow(['姓名', '年齡', '地址'])
# 添加數據
# writer.writerows(stus_lis)
for stu in stu_lis:
writer.writerow([stu.name, stu.age, stu.addr])
return response
上述代碼中,數據查詢和數據添加時,分別使用了兩種方法(注釋掉了一種),兩者的區別主要是添加數據時,是一條一條添加還是一次全部添加,使用writer.writerow()方法,每次添加一條數據,writer.writerows()可一次添加多條數據,但是若數據量過大,可能會導致內存溢出。因此,可根據實際情況選擇使用。
三. 前台實現
前台頁面中使用button按鈕,並為其添加click事件,主要代碼如下
# js實現點擊下載
<button class="export">導出</button>
<script>
$('.export').click(function () {
location.href='http://127.0.0.1:8000/student/'
})
</script>
剛開始想使用ajax異步請求,實現數據的下載,但是響應數據的類型,一直確定不了,所以后來直接使用location.href實現鏈接跳轉,完成下載。如果哪位大佬有什么好的處理方法,還請不吝賜教