django下載csv檔案筆記
下載小的csv檔案
這裡將用一個生成小的
CSV
檔案為例,來把生成CSV
檔案的技術要點講到位。我們用Python
內建的csv
模組來處理csv
檔案,並且使用HttpResponse
來將csv
檔案返回回去。示例程式碼如下:
1.在templates目錄下新建一個abc.txt的檔案模板,內容如下
{% for row in rows%}{{row.0}},{{row.1}}
{% endfor %}
2.在view檢視中編寫如下程式碼
from django.shortcuts import render,loader
from django.http import HttpResponse,StreamingHttpResponse
import csv
def csvtest(request):
#設定型別為csv
response = HttpResponse(content_type='text/csv')
#設定Content-Disposition屬性,檔名為abc.csv
response['Content-Disposition'] = "attachment;filename='abc.csv'"
context = {
'rows':[['username', 'age'],
['age', 18]]
}
render_csv = render(request, 'abc.txt',context=context)
response.content = render_csv
#或者使用csv寫入內容
# writer = csv.writer(response)
# writer.writerow(['username', 'age'])
# writer.writerow(['zhiliao', '18'])
return response
這裡再來對每個部分的程式碼進行解釋:
- 我們在初始化
HttpResponse
的時候,指定了Content-Type
為text/csv
,這將告訴瀏覽器,這是一個csv
格式的檔案而不是一個HTML
格式的檔案,如果用預設值,預設值就是html
,那麼瀏覽器將把csv
格式的檔案按照html
格式輸出,這肯定不是我們想要的。- 第二個我們還在
response
中新增一個Content-Disposition
頭,這個東西是用來告訴瀏覽器該如何處理這個檔案,我們給這個頭的值設定為attachment;
,那麼瀏覽器將不會對這個檔案進行顯示,而是作為附件的形式下載,第二個filename="abc.csv"
是用來指定這個csv
檔案的名字。- 我們使用response.content設定response的內容
下載大的csv檔案
以上的例子是生成的一個小的
csv
檔案,如果想要生成大型的csv
檔案,那麼以上方式將有可能會發生超時的情況(伺服器要生成一個大型csv檔案,需要的時間可能會超過瀏覽器預設的超時時間)。這時候我們可以藉助另外一個類,叫做StreamingHttpResponse
物件,這個物件是將響應的資料作為一個流返回給客戶端,而不是作為一個整體返回。示例程式碼如下:
from django.shortcuts import render,loader
from django.http import HttpResponse,StreamingHttpResponse
def large_csv(request):
response = StreamingHttpResponse(content_type='text/csv')
response['content-Disposition']= "attachment;filename='lange.csv'"
rows = ('Row{},{}/n'.format(row, row) for row in range(0,1000000))
response.streaming_content = rows
return response
這個類是專門用來處理流資料的。使得在處理一些大型檔案的時候,不會因為伺服器處理時間過長而到時連線超時。這個類不是繼承自
HttpResponse
,並且跟HttpResponse
對比有以下幾點區別:
- 這個類沒有屬性
content
,相反是streaming_content
。- 這個類的
streaming_content
必須是一個可以迭代的物件。- 這個類沒有
write
方法,如果給這個類的物件寫入資料將會報錯。注意:
StreamingHttpResponse
會啟動一個程式來和客戶端保持長連線,所以會很消耗資源。所以如果不是特殊要求,儘量少用這種方法。
相關文章
- Django - 檢視層 - 生成CSV檔案Django
- js實現使用檔案流下載csv檔案JS
- Django筆記二十之手動編寫migration檔案Django筆記
- django專案筆記1Django筆記
- 使用Vue+go實現前後端檔案的上傳下載,csv檔案上傳下載可直接照搬VueGo後端
- 實現簡單的csv檔案上傳和bootstrap表格的下載boot
- Jmeter之讀取csv檔案踩坑記JMeter
- csv是什麼格式檔案 csv檔案是什麼意思
- pandas操作csv檔案
- python生成CSV檔案Python
- CSV檔案儲存
- Modern CSV for mac CSV檔案編輯器Mac
- UI自動化學習筆記- Selenium操作檔案上傳下載UI筆記
- 檔案下載
- csv檔案用什麼開啟 csv是什麼格式檔案
- linux 下MySQL命令列匯出csv檔案格式LinuxMySql命令列
- java匯出CSV檔案Java
- Mysql匯入csv檔案MySql
- python 寫入CSV檔案Python
- 00、下載檔案
- Ajax 下載檔案
- js 檔案下載JS
- HttpClient 下載檔案HTTPclient
- JAVA檔案下載Java
- Response下載檔案
- FastApi下載檔案ASTAPI
- 檔案程式設計、檔案下載程式設計
- Django2學習筆記--引用本地靜態檔案css,js等Django筆記CSSJS
- NPM酷庫049:csv-parse,解析csv檔案NPM
- 字幕檔案srt筆記筆記
- SQLServer匯入大CSV檔案SQLServer
- PHP 匯出 CSV 格式檔案PHP
- 使用 Python 處理 CSV 檔案Python
- 2.3.1 (下)WebView 檔案下載、快取、記憶體洩露WebView快取記憶體洩露
- csv跨域傳輸再生成csv檔案處理跨域
- SpringMVC檔案上傳下載(單檔案、多檔案)SpringMVC
- python之檔案下載Python
- 檔案上傳下載