Django實現web頁面數據導出為CSV文件


一. 需求說明

在實際項目中,有一種需求是這樣的:對於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實現鏈接跳轉,完成下載。如果哪位大佬有什么好的處理方法,還請不吝賜教


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM