Django 如何实现文件下载
1. 思路:
文件,让用户下载
- a标签+静态文件
- 设置响应头(django如何实现文件下载)
2. a标签实现
<a href="/static/xxx.xlsx">下载模板</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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>批量导入客户数据</title>
</head>
<body> <h2>批量导入</h2>
<form action="">
<a href="{% url 'crm_download' %}">下载模板</a>
<p><input type="file" name="xsfile"></p>
<p><input type="submit" value="提交"></p>
</form> </body>
</html>
Django 如何实现文件下载的更多相关文章
- django三种文件下载方式
一.概述 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. ...
- 详解django三种文件下载方式
推荐使用FileResponse,从源码中可以看出FileResponse是StreamingHttpResponse的子类,内部使用迭代器进行数据流传输. 在实际的项目中很多时候需要用到下载功能,如 ...
- Django学习之文件下载
在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. 我们这里 ...
- django实现客户端文件下载
基于django项目,由于不是专门讲文件的下载,这里仅是项目需要,所以可能不是特别的详细.仅做流程的演示: 实现过程: 1.准备下载url # 下载文件 url(r'^download_file/$' ...
- django 中实现文件下载的3种方式
方法一:使用HttpResponse from django.shortcuts import HttpResponse def file_down(request): file=open('/hom ...
- django 实现文件下载功能
一.概述 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. ...
- Django的文件下载
在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. 我们这里 ...
- Django 实现文件下载
1. 思路: 文件,让用户下载 - a标签+静态文件 - 设置响应头(django如何实现文件下载) 2. a标签实现 <a href="/static/xxx.xlsx"& ...
- django 中下载文件与下载保存为excel
一.django 中下载文件 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍dja ...
随机推荐
- [Leetcode] Maximum depth of binary tree二叉树的最大深度
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...
- 洛谷 P3242 [HNOI2015]接水果 解题报告
P3242 [HNOI2015]接水果 题目描述 风见幽香非常喜欢玩一个叫做 \(osu!\) 的游戏,其中她最喜欢玩的模式就是接水果.由于她已经\(DT\) \(FC\) 了\(\tt{The\ b ...
- React setState和修改props触发的钩子
1. setState的改变会触发4个生命周期钩子 shouldComponentUpdatecomponentWillUpdaterendercomponentDidUpdate 2. props的 ...
- TYVJ2032 升降梯上
Description: 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄.Nescafe ...
- linux安装卸载MySQL以及密码设置+Hive测试
linux系统卸载MYSQL 1,先通过yum方式卸载mysql及相关组件 命令:yum remove mysql* 2.通过命令:rpm -qa|grep -i mysql 查找系统的有关于mysq ...
- 在eclipse中安装html编辑器插件
1.下载插件( 点击下载) 解压后得到GEF-ALL-3.4.1.zip和tk.eclipse.plugin.htmleditor_2.2.0.jar 2.安装GE ...
- POJ3177:Redundant Paths(并查集+桥)
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19316 Accepted: 8003 ...
- arp协议及简单应用
1:什么是arp协议 参考文章:http://blog.csdn.net/tigerjibo/article/details/7351992 全称是:Address Resolution Protoc ...
- poj 3498 最大流
March of the Penguins Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 4809 Accepted: ...
- 2017-2018-2 20179207 《网络攻防技术》python简明教程(1-10)
Python3简明教程(一) 开始python之旅 使用交互模式的 Python3解释器 简单使用 vim 编写 Python3 脚本 执行 Python3 脚本 Python3 代码风格建议 Pyt ...