108.csvファイルの生成とダウンロード

2547 ワード

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="">
    writer.writerow(['username', 'age', 'height'])
    writer.writerow(['    ', '19', '167'])
    return response

以上csvモジュールのwriterを用いてresponseにデータを書き込むのは非常に不便で、まずテンプレートをカスタマイズしてからテンプレートにデータを追加すればいいのです.
==サンプルコードは以下のとおりです:==
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に設定します.ブラウザはこのファイルを表示するのではなく、福建省の形式でダウンロードし、2番目のパラメータfilenameはcsvファイル名を設定します.
(2)テンプレートに渡されるデータcontextを辞書タイプとして定義する.
(3)django.templateにloaderメソッドをインポートし、カスタムテンプレートファイルをロードし、render関数を使用して定義したテンプレートにcontextを転送します.その後、転送データのテンプレートをresponseとする.contentセクション.
(4)最後のステップはresponseに戻ることである.