Django 实现文件下载的方法(包括AJAX方式下载) 您所在的位置:网站首页 ajax请求的url怎么从别的文件获取 Django 实现文件下载的方法(包括AJAX方式下载)

Django 实现文件下载的方法(包括AJAX方式下载)

2024-07-14 06:22| 来源: 网络整理| 查看: 265

一、前端页面反向解析URL的思路

1、主要思路:

文件,让用户下载 - a标签+静态文件 - 设置响应头(django如何实现文件下载)

2、a标签实现:

下载模板

3、设置响应头:

方法一:使用HttpResponse

from django.shortcuts import HttpResponse def file_down(request): file=open('/home/amarsoft/download/example.tar.gz','rb') response =HttpResponse(file) response['Content-Type']='application/octet-stream' response['Content-Disposition']='attachment;filename="example.tar.gz"' return response

方法二:使用StreamingHttpResponse

from django.http import StreamingHttpResponse def file_down(request): file=open('/home/amarsoft/download/example.tar.gz','rb') response =StreamingHttpResponse(file) response['Content-Type']='application/octet-stream' response['Content-Disposition']='attachment;filename="example.tar.gz"' return response

方法三:使用FileResponse

from django.http import FileResponse def file_down(request): file=open('/home/amarsoft/download/example.tar.gz','rb') response =FileResponse(file) response['Content-Type']='application/octet-stream' response['Content-Disposition']='attachment;filename="example.tar.gz"' return response

总结:对比 虽然使用这三种方式都能实现,但是推荐用FileResponse,在FileResponse中使用了缓存,更加节省资源。虽说是三种方式,但是原理相同,说白了就是一种方式。为了更好的实现文件下载,FileResponse对StreamingHttpResponse做了进一步的封装,即StreamingHttpResponse是FileResponse的父类。而HttpResponse,StreamingHttpResponse,FileResponse三者都继承了基类HttpResponseBase。HttpResponseBase类是一个字典类,其封装了一个_headers属性,该属性是一个字典类型,里面封装了response的头信息。因为该HttpResponseBase类被封装成了一个字典类,所以可以直接使用response[‘Content-Type’]这种形式访问,也可以使用response._headers[‘Content-Type’]访问。值得注意的是: 1.HttpResponseBase只有来设置response的头信息,并不能返回给客户端发生数据。 2.response.keys()这中形式不能访问到字典的方法,必须使用response._headers.keys()才能访问到字典的方法。

4、项目案例:

1.让公司内部可以批量导入客户资源信息;

2.首先要下载xlsx模板文件;

增加URL:

urlpatterns = [ url(r'^stark/crm/login/', crm_views.login,name='crm_login'), url(r'^stark/crm/index/', crm_views.index,name='crm_index'), url(r'^stark/crm/Download/', crm_views.download,name='crm_download'), ]

编写download视图函数:

def download(request): file=open('static/xlsx/xlsx_file.xlsx','rb') response =FileResponse(file) response['Content-Type']='application/octet-stream' response['Content-Disposition']='attachment;filename="xlsx_file.xlsx"' return response

前端页面反向解析URL

批量导入客户数据 批量导入 下载模板

二、ajax请求下载的思路

下面的方法是个技巧,

AJAX发送参数到后台后,后台处理后,传数据到前台,Ajax在success里面构建了一个from表单, 当后台传来的是文件时,自动点击提交按钮,文件就会被下载。

$.ajax({ type: "POST", url: url, data: params, success: function(response, status, request) { var disp = request.getResponseHeader('Content-Disposition'); if (disp && disp.search('attachment') != -1) { //判断是否为文件 var form = $(''); $('body').append(form); form.submit(); //自动提交 } } }); "CSRF token missing or incorrect."的解决方法

思路:屏蔽CSRF

django工程views.py添加屏蔽装饰器

from django.views.decorators.csrf import csrf_exempt @csrf_exempt def some_view(request): #...

参考文献: 1、https://www.cnblogs.com/supery007/p/8146035.html 2019.6.27 2、https://blog.csdn.net/junehappylove/article/details/81287679 2019.6.27 3、https://www.cnblogs.com/zhujiabin/p/8260288.html 2019.6.27



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有