首頁  >  文章  >  後端開發  >  詳解django三種檔案下載方式_python

詳解django三種檔案下載方式_python

不言
不言原創
2018-04-08 11:22:192294瀏覽

這篇文章主要介紹了詳解django三種檔案下載方式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

一、概述​​

在實際的專案中很多時候都需要用到下載功能,如導excel、pdf或檔案下載,當然你可以使用web服務自行建立可以用於下載的資源伺服器,如nginx,這裡我們主要介紹django中的檔案下載。

實作方式:a標籤+回應頭資訊(當然你可以選擇form實作)

<p class="col-md-4"><a href="{% url &#39;download&#39; %}" rel="external nofollow" >点我下载</a></p>

方式一:使用HttpResponse

路由url:

url(r&#39;^download/&#39;,views.download,name="download"),

#views.py代碼

##

from django.shortcuts import HttpResponse
def download(request):
  file = open(&#39;crm/models.py&#39;, &#39;rb&#39;)
  response = HttpResponse(file)
  response[&#39;Content-Type&#39;] = &#39;application/octet-stream&#39; #设置头信息,告诉浏览器这是个文件
  response[&#39;Content-Disposition&#39;] = &#39;attachment;filename="models.py"&#39;
  return response

方式二:使用StreamingHttpResponse

#其他邏輯不變,主要變化在後端處理

##
from django.http import StreamingHttpResponse
def download(request):
  file=open(&#39;crm/models.py&#39;,&#39;rb&#39;)
  response =StreamingHttpResponse(file)
  response[&#39;Content-Type&#39;]=&#39;application/octet-stream&#39;
  response[&#39;Content-Disposition&#39;]=&#39;attachment;filename="models.py"&#39;
  return response

方式三:使用FileResponse


#
from django.http import FileResponse
def download(request):
  file=open(&#39;crm/models.py&#39;,&#39;rb&#39;)
  response =FileResponse(file)
  response[&#39;Content-Type&#39;]=&#39;application/octet-stream&#39;
  response[&#39;Content-Disposition&#39;]=&#39;attachment;filename="models.py"&#39;
  return response

##使用總結

三種http回應物件在django官網都有介紹.入口:https://docs.djangoproject.com/en/1.11/ref/request-response/

建議使用FileResponse,從原始碼可以看出FileResponse是StreamingHttpResponse的子類,內部使用迭代器進行資料流傳輸。


#

以上是詳解django三種檔案下載方式_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn