Django实战教程第45部分:如何下载CSV文件?

2026-06-10 22:392阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计865个文字,预计阅读时间需要4分钟。

Django实战教程第45部分:如何下载CSV文件?

学习笔记,仅供参考,有误必纠;参考自:Django打造大型企业官网——Huang Y;文章目录;CSV文件;生成小的CSV文件;将`csv`文件定义为模板;生成大的CSV文件。

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

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



文章目录

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



CSV文件



Django实战教程第45部分:如何下载CSV文件?

生成小的CSV文件



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

import csv
from django.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_template
return response



向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 = rows
return response



定义主urls.py文件:

from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls import include

urlpatterns = [
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"),
]

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



StreamingHttpResponse类



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

  • 这个类没有属性​​content​​​,相反是​​streaming_content​​。
  • 这个类的​​streaming_content​​必须是一个可以迭代的对象。
  • 这个类没有​​write​​方法,如果给这个类的对象写入数据将会报错。
  • 注意:​​StreamingHttpResponse​​会启动一个进程来和客户端保持长连接,所以会很消耗资源。所以如果不是特殊要求,尽量少用这种方法。

    本文共计865个文字,预计阅读时间需要4分钟。

    Django实战教程第45部分:如何下载CSV文件?

    学习笔记,仅供参考,有误必纠;参考自:Django打造大型企业官网——Huang Y;文章目录;CSV文件;生成小的CSV文件;将`csv`文件定义为模板;生成大的CSV文件。

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

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



    文章目录

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



    CSV文件



    Django实战教程第45部分:如何下载CSV文件?

    生成小的CSV文件



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

    import csv
    from django.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_template
    return response



    向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 = rows
    return response



    定义主urls.py文件:

    from django.contrib import admin
    from django.urls import path
    from . import views
    from django.conf.urls import include

    urlpatterns = [
    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"),
    ]

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



    StreamingHttpResponse类



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

  • 这个类没有属性​​content​​​,相反是​​streaming_content​​。
  • 这个类的​​streaming_content​​必须是一个可以迭代的对象。
  • 这个类没有​​write​​方法,如果给这个类的对象写入数据将会报错。
  • 注意:​​StreamingHttpResponse​​会启动一个进程来和客户端保持长连接,所以会很消耗资源。所以如果不是特殊要求,尽量少用这种方法。