前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Django 文件下载

Django 文件下载

作者头像
kirin
发布于 2020-05-20 16:11:32
发布于 2020-05-20 16:11:32
1.1K00
代码可运行
举报
文章被收录于专栏:Kirin博客Kirin博客
运行总次数:0
代码可运行

1. 思路:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文件,让用户下载
    - a标签+静态文件
    - 设置响应头(django如何实现文件下载)

2. a标签实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="/static/xxx.xlsx">下载模板</a>

3. 设置响应头

方法一:使用HttpResponse

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

总结:对比

1 2 3

虽然使用这三种方式都能实现,但是推荐用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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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视图函数:

1 2 3 4 5 6

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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>

参考文章https://www.cnblogs.com/supery007/p/8146035.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
django 实现文件下载
# views.py中 from django.http import FileResponse # 导入处理文件的response def get_files(request): file=open('./templates/1.txt','rb')# 当前目录下的文件 res=FileResponse(file) # 放到FileResponse 中, res['Content-Type'] = 'application/octet-stream' # 设置headers
kirin
2020/05/21
4920
django:自定义静态文件服务器
静态文件使用nginx是比较有效率的,但是有时,我们需要对文件下载做细粒度的处理,比如鉴权下载,此时就需要写代码了。 下面将一步步实现一个自定义的文件handler。
超级大猪
2019/11/21
1.4K0
(干货)前端实现导出excel的功能
导出功能其实在开发过程中是很常见的,平时我们做导出功能的时候基本都是后台生成,我们直接只需要调一支接口后台把生成的文件放到服务器或者数据库mongodb中,如果是放到mongodb中的话,我们需要从mongodb中通过唯一生成的id去拿到文件,最后window.location.href就完事了。如果是放到服务器上,直接从服务器上下载就好了。下面我们使用另一种 H5 的新特性blob[1]对象来实现一下导出功能。
小丑同学
2020/09/20
1.4K0
django+ajax用FileResp
  公司的需求是从mongodb中查找数据并下载回本地,但是在将文件从mongodb通过django服务端,然后从django服务端向浏览器下载文件。但是在下载的时候出了些问题。由于是用的ajax请求,异步的,所以在将文件返回到前端的时候,前端的script标签中的success回调函数中有数据,且是string类型。
py3study
2020/01/19
8950
django+ajax用FileResp
16.Django学习之文件上传和下载
更新上传了的文件(注意,只是会更新数据库中那个字段保存的文件的路径,但是之前上传的文件是不会被自动删除的,需要我们自行再写逻辑来删除之前上传错的或者需要被覆盖的文件。还有就是如果上传的文件名称是相同的那么你会发现数据库中这个字段的路径后面的文件名称会出现一个乱起八糟的随机字符串,这是因为上传的文件名称冲突了,django为了解决这个冲突,给你改了一下你的文件名称。)
changxin7
2019/12/12
1.2K0
django FileResponse 解决中文命名文件下载后乱码问题
from django.utils.encoding import escape_uri_path # 用于解决中文命名文件乱码问题 def excel(request): # df=pd.read_excel('测试.xlsx') # ht=df.to_html() # with open('./测试.xlsx', 'rb')as f: # df = f.read() df=open('./测试.xlsx) # 这里需要用open打开,如果用with op
kirin
2020/08/02
2.7K0
Django之文件上传下载
在文件上传期间,实际文件数据存储在request.FILES中。此字典中的每个条目都是UploadedFile对象(或子类) – 上传文件的简单包装器。UploadedFile对象是对Python file对象的一个简单封装,并带有Django特定的附加功能。需要表示文件的时候,Django内部会使用这个类。UploadedFile对象拥有下列属性和方法:
菲宇
2022/05/06
3.4K0
python测试开发django-112.文件下载功能
开发一个文件下载功能,在页面上点下载按钮,可以下载一个文件,如excel,word,pdf等
上海-悠悠
2021/09/14
3990
vue+django实现下载文件
在实际项目,某些下载链接,是私密的。必须使用post方式,传递正确的参数,才能下载。
py3study
2021/03/04
2.1K0
vue+django实现下载文件
django 下载文件(解决中文路径问题)
def file_download(request): """ 下载文件 """ # 我这里是访问网络地址下载文件 # 下载本地文件的话直接打开文件下载就ok # with open('xxx', mode='rb') as f: # data = f.read() res = requests.get(xxx) # 文件分块处理(适用于大文件) data = res.iter_content() # 设置content_
ruochen
2021/05/12
1.3K0
django 下载文件(解决中文路径问题)
前端文件下载(三)
两篇文章讲解的都是自动启动浏览器下载。下载的进度浏览器进行反馈,文件小的时候浏览器会很快下载完并提示,但是文件很大的话,那么下载就很慢了,准确来说数据拉取很慢,点击之后页面很久才会响应。这个时候,我们加个 loading 转圈圈提示就行了,但是不友好,是否让用户知道数据加载到哪里了呢?加载完后浏览器吊起下载。
Jimmy_is_jimmy
2023/09/19
4630
前端文件下载(三)
django 实现文件下载功能
在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。
py3study
2020/02/18
4K0
django 实现文件下载功能
Django 下载文件返回中文名
from django.utils.http import urlquote from django.http import HttpResponse
用户5760343
2022/05/14
4580
django 1.8 官方文档翻译: 3-5-1 使用Django输出CSV
这篇文档阐述了如何通过使用Django视图动态输出CSV (Comma Separated Values)。 你可以使用Python CSV 库或者Django的模板系统来达到目的。
ApacheCN_飞龙
2022/11/27
7640
php 实现文件下载
1、php下载原理图 2、文件下载源码: 1 <?php 2 $file_name="umiwi.apk";//需要下载的文件 3 $file_dir = "./"; //文件目录 4 $fi
joshua317
2018/04/10
2.2K0
php 实现文件下载
Spring MVC 4 文件下载实例(带源码)
【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】
明明如月学长
2021/08/27
8260
Go语言之搭建文件下载服务端
一.文件下载简介 文件下载总体步骤 客户端向服务端发起请求,请求参数包含要下载文件的名称 服务器接收到客户端请求后把文件设置到响应对象中,响应给客户端浏览器 载时需要设置的响应头信息 Content-Type: 内容MIME类型 application/octet-stream 任意类型 Content-Disposition:客户端对内容的操作方式 inline 默认值,表示浏览器能解析就解析,不能解析下载 attachment;filename=下载时显示的文件名 ,客户端浏览器恒下载 二.代码 在vi
IT工作者
2022/03/29
1.5K0
Java 文件下载案例讲解
文件下载是Web应用程序中常见的功能之一。它允许用户从Web服务器上下载文件,例如文档、图片、音频、视频等。在本文中,我们将详细解释如何在Java Web应用程序中实现文件下载功能。我们将提供示例代码和逐步说明,以帮助您理解和实现这一功能。
繁依Fanyi
2023/11/04
4240
django之文件上传下载等相关
实现步骤: 1)创建项目Django_upload:django-admin startproject Django_upload;创建app:cd Django_upload;python manage.py startapp blog。 2)设计模型(M) 这里的模型只包括了两个属性:用户名(即谁上传了该文件);文件名。具体形式如下所示: #coding=utf-8 from __future__ import unicode_literals from django.db import models class NormalUser(models.Model): username=models.CharField('用户名',max_length=30) #用户名 headImg=models.FileField('文件',upload_to='./upload')#文件名 def __str__(self): return self.username class Meta: ordering=['username']#排序风格username 同步数据库:Python manage.py makemigrations python manage.py migrate 3)设计视图(V) view.py: #coding=utf-8 from django.shortcuts import render,render_to_response from django import forms from django.http import HttpResponse from blog.models import * # Create your views here. class NormalUserForm(forms.Form): #form的定义和model类的定义很像 username=forms.CharField() headImg=forms.FileField() #在View中使用已定义的Form方法 def registerNormalUser(request): #刚显示时调用GET方法 if request.method=="POST": uf = NormalUserForm(request.POST,request.FILES)#刚显示时,实例化表单(是否有数据) if uf.is_valid():#验证数据是否合法,当合法时可以使用cleaned_data属性。 #用来得到经过'clean'格式化的数据,会所提交过来的数据转化成合适的Python的类型。 username = uf.cleaned_data['username'] headImg = uf.cleaned_data['headImg'] #write in database normalUser=NormalUser()#实例化NormalUser对象 normalUser.username = username normalUser.headImg = headImg normalUser.save()#保存到数据库表中 return HttpResponse('Upload Succeed!')#重定向显示内容(跳转后内容) else: uf=NormalUserForm()#刚显示时,实例化空表单 return render(request,'register.html',{'uf':uf})#只有刚显示时才起作用 配置urls.py: from django.conf.urls import url from django.contrib import admin from blog.views import * urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^register/$',registerNormalUser), ] 4)设计模板与表单(T)templates/register.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="
菲宇
2019/06/13
3.2K0
【springboot2.x】实现文件下载
简写了几种下载日志的方法。一、方法一 @ApiOperation("日志下载") @GetMapping("/logDownload") public void download(HttpServletResponse response) { try { String mulu = "d:/logs"; ZipUtil.zip(mulu); String path = "d:/logs.zip";
无敌小菜鸟
2023/02/16
8800
相关推荐
django 实现文件下载
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验