108.生成和下載csv文件

生成CSV文件

有時候咱們作的網站,須要將一些數據,生成一個csv文件返回瀏覽器,而且是做爲附件的形式下載下來。

生成小的csv文件:

生成一個小的csv文件,咱們用Python內置的csv模塊來處理csv文件,而且使用HttpResponse來將csv文件返回回去。==採用python內置的csv模塊建立csv文件示例代碼以下:==
from .models import User
import csv
from django.template import loader, Context


def csv_views(request):
    # 1. 採用python內置的csv模塊建立csv文件
    # 初始化HttpResponse對象,默認狀況下,請求的頭的類型爲text/html,可是若是想要生成csv文件的話
    # 就要修改請求頭的content_type=text/csv
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = "attachment; filename=zjy.csv"

    # 對response對象作相應的寫操做,由於HttpResponse實現了一個寫操做。
    writer = csv.writer(response)
    # print(writer) => <_csv.writer object at 0x000001F6ADAB51A8>
    writer.writerow(['username', 'age', 'height'])
    writer.writerow(['孤煙逐雲', '19', '167'])
    return response
以上使用csv模塊的writer的方法將數據寫入到response中,很是的不方便,能夠首先自定義一個模板,以後向模板中添加數據就能夠了。

==示例代碼以下:==html

from django.template import loader
from django.http import HttpResponse


def csv_view(request):
# 初始化HttpResponse對象,默認狀況下請求頭的類型爲text/html,若是不進行修改的話,就會按照html的格式進行解析,這樣的話,就不可以獲得咱們想要的效果了。
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = "attachment; filename=zjy.csv"
    context = {
        'rows':[
        ['username', 'age'],
        ['孤煙逐雲', 18],
        ]
    }
    
    # 自定義一個模板文件位於:book/templates/book/static/zjy.txt
    # zjy.txt文件的內容爲:
    # {% for row in rows %} {{ row.0 }},{{ row.1 }}
    # {% endfor %}
    
    <!--加載模板文件-->
    template = loader.get_template('book/static/zjy.txt')
    <!--向模板文件中添加數據-->
    zjy_csv = template.render(context)
    response.content = zjy_csv
    return response
==總結:生成和下載csv文件的總體思路以下:==
(1)初始化HttpResponse對象的請求頭的content_type爲text/csv,而且設置爲該文件爲附件能夠下載同時設置文件名:['Content-Disposition']="attachment; filename=zjy.csv",添加的Content-Disposition頭,用來告訴瀏覽器該如何處理這個文件,咱們將值設置爲attachment;那麼瀏覽器將不會對這個文件進行顯示,而是做爲福建的形式下載,第二個參數filename設置csv文件名。
(2)定義向模板中傳遞的數據context 爲字典類型。
(3)從django.template中導入loader 方法,加載咱們自定義好的模板文件,而且將咱們的context使用render函數傳入咱們定義好的模板。以後將已經傳入數據的模板作爲response.content部分。
(4)最後一步就是返回response。
相關文章
相關標籤/搜索