学习笔记,仅供参考,有错必纠

参考自:Django打造大型企业官网–Huang Y;


文章目录

  • CSV文件
    • 生成小的CSV文件
    • 将`csv`文件定义成模板
    • 生成大的CSV文件
    • StreamingHttpResponse类

CSV文件

生成小的CSV文件

首先,我们在项目文件夹的views.py文件中,定义一个视图函数:

import csv
from django.http import HttpResponsedef csv_view(request):response = HttpResponse(content_type='text/csv')#初始化HttpResponse的时候,指定Content-Type为text/csvresponse['Content-Disposition'] = 'attachment; filename="somefilename.csv"'#在response中添加一个Content-Disposition头#attachment:浏览器将不会对这个文件进行显示,而是作为附件的形式下载#filename="somefilename.csv":指定这个csv文件的名字writer = csv.writer(response)#使用csv模块的writer方法,将相应的数据写入到response中writer.writerow(['username', 'age', 'height', 'weight'])writer.writerow(['Huang', '19', '30', '12'])return response

在主urls.py文件中,我们添加路由:

from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls import includeurlpatterns = [path('admin/', admin.site.urls),path("csv_view/", views.csv_view, name = "csv_view"),
]

向http://127.0.0.1:8000/csv_view发起请求,somefilename.csv文件被下载:

打开该文件:

csv文件定义成模板

我们还可以将csv格式的文件定义成模板,然后使用Django内置的模板系统,并给这个模板传入一个Context对象,这样模板系统就会根据传入的Context对象,生成具体的csv文件。

首先,我们定义一个模板文件downLoad.html:

{% for row in rows %} {{ row.0 }},{{ row.1 }}
{% endfor %}

在views.py文件中定义一个视图函数:

def csv_view(request):response = HttpResponse(content_type='text/csv')response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'context = {"rows" : [["username", "age"],["Huang", 19]]        }template = loader.get_template("downLoad.html")csv_template = template.render(context)response.content = csv_templatereturn response

向http://127.0.0.1:8000/csv_view发起请求,打开下载后的csv文件:

生成大的CSV文件

我们可以借助StreamingHttpResponse对象,这个对象是将响应的数据作为一个流返回给客户端,而不是作为一个整体返回。

首先,我们在views.py文件中添加视图函数:

def large_csv_view(request):response = StreamingHttpResponse(content_type='text/csv')response['Content-Disposition'] = 'attachment; filename="largeFile.csv"'rows = ("Row {},Value {}\n".format(row, row) for row in range(0, 100))response.streaming_content = rowsreturn response

定义主urls.py文件:

from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls import includeurlpatterns = [path('admin/', admin.site.urls),path('', views.index, name = "index"),path("csv_view/", views.csv_view, name = "csv_view"),path("large_csv_view/", views.large_csv_view, name = "large_csv_view"),
]

向http://127.0.0.1:8000/large_csv_view发起请求,largeFile.csv文件被下载:

StreamingHttpResponse类

这个类是专门用来处理流数据的。使得在处理一些大型文件的时候,不会因为服务器处理时间过长而到时连接超时。这个类不是继承自HttpResponse,并且跟HttpResponse对比有以下几点区别:

  1. 这个类没有属性content,相反是streaming_content
  2. 这个类的streaming_content必须是一个可以迭代的对象。
  3. 这个类没有write方法,如果给这个类的对象写入数据将会报错。

注意:StreamingHttpResponse会启动一个进程来和客户端保持长连接,所以会很消耗资源。所以如果不是特殊要求,尽量少用这种方法。

Django从理论到实战(part45)--下载CSV文件相关推荐

  1. Django从理论到实战(part18)--配置templates文件夹路径

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的记 ...

  2. 【浏览器】浏览器下载CSV文件的方法

    输入网址URL,打开CSV资源文件: 那么怎么下载这个csv文件呢? 方法一:直接保存网页就行,保存的不是.html而是.csv 方法二:复制全部文本,本地记事本保存temp.txt,转型.csv 如 ...

  3. php中下载csv文件怎么打开,php对csv文件的读取,写入,输出下载操作详解

    搜索热词 代码如下: PHP $file = fopen('text.csv','r'); while ($data = fgetcsv($file)) { //每次读取CSV里面的一行内容 //pr ...

  4. python如何批量下载csv文件

    如何将上图一天的csv文件批量下载下来?首先我们点击一天csv文件链接,网页会自动弹出一个方框如下图,我们复制一天数据链接http://tkkankyo.eng.niigata-u.ac.jp/HP/ ...

  5. 【windows】win11 简体中文版系统下载csv文件打开乱码

    背景:windows11企业版(简体中文),从从公司网站(繁体)下载csv,本地打开后乱码. 解决方法:在本地电脑通过excel导入csv数据,并修改文件原始格式编码的方式,找到原始文件的正确编码方式 ...

  6. txt格式转换成prg_Advanced CSV Converter v6.69下载(csv文件转换工具)

    CSV文件是一个纯文本文件,有的时候,由于使用需求,需要将CSV转换为其他的格式使用,在这里,小编向大家推荐这款Advanced CSV Converter转换工具,它支持将CSV格式的文件转换成DB ...

  7. Jmeter书中不会教你的(25)——快递时效查询实战6写入csv文件

    前面已经通过参数化.通过提取响应值.引用变量已经实现了批量查询时效的功能,但是如果我们需要查看结果时需要在查看结果树中一个一个点击查看就很不方便,最好能将所需要的结果提取出来后再写入到csv文件中,这 ...

  8. Django从理论到实战(part25)--数据库操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  9. Django从理论到实战(part22)--include模板标签

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

最新文章

  1. php如何保存服务器会话,如何用PHP在服务器上创建会话?
  2. iOS程序启动画面的制作
  3. matlab关于噪声课设,基于matlab的有噪声的语音信号处理的课程设计.doc
  4. CG CTF WEB AAencode
  5. 前端html页面模块,页面模块化实现的条件和基本实现思路 – WEB前端开发
  6. java面试线程必备知识点,怼死面试官,从我做起
  7. [译]CSV 注入:被人低估的巨大风险
  8. 什么是JAVA内容仓库(Java Content Repository)(4完)
  9. mysql 单表多级查询_mysql单表与多表查询
  10. ireport中band指什么_金庸武侠经典书剑恩仇录中,“书剑”指的究竟是什么呢?...
  11. Craps小游戏简单代码实现
  12. 手把手教你用Python网络爬虫实现起点小说下载
  13. 威联通NAS配置1.18.1Minecraft服务器
  14. 微信小程序-首屏视频加载
  15. 风雨十年:一个老程序员的心里话!
  16. unity steamworksdk简单接入
  17. 从云大会谈谈云计算“关键”技术趋势
  18. tomcat的宏观架构
  19. 在你的iPad上调整图片尺寸
  20. 项目管理案例分析有哪些?

热门文章

  1. 2.3 线性变换引入
  2. Ubuntu使用技巧(二)
  3. CC2530, 各种智能家居通信技术比较
  4. vue获取当前登陆用户信息
  5. m40型工业机器人_工业机器人4大控制方式,你知道几种?
  6. Oracle 中 decode 函数用法
  7. MyEclipse中常用的快捷键
  8. eclipse实现批量修改文件的编码方式
  9. Java内存泄漏问题
  10. nginx缓存服务器