2

サイトからデータを取得し、zip 圧縮された csv ファイルにするビューがあります。これが私の作業コードsans zipです:

def backup_to_csv(request):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=backup.csv'

    writer = csv.writer(response, dialect='excel')

    #code for writing csv file go here...

    return response

そしてそれはうまく機能します。今、私はそのファイルを送信する前に圧縮したいと考えています。これは私が立ち往生するところです。

def backup_to_csv(request):

    output = StringIO.StringIO() ## temp output file
    writer = csv.writer(output, dialect='excel')

    #code for writing csv file go here...

    response = HttpResponse(mimetype='application/zip')
    response['Content-Disposition'] = 'attachment; filename=backup.csv.zip'

    z = zipfile.ZipFile(response,'w')   ## write zip to response
    z.writestr("filename.csv", output)  ## write csv file to zip

    return response

しかし、それはそうではなく、これを行う方法がわかりません。

4

3 に答える 3

6

はい、分かりました。ここに私の新しい機能があります:

def backup_to_csv(request):

    output = StringIO.StringIO() ## temp output file
    writer = csv.writer(output, dialect='excel')

    #code for writing csv file go here...

    response = HttpResponse(mimetype='application/zip')
    response['Content-Disposition'] = 'attachment; filename=backup.csv.zip'

    z = zipfile.ZipFile(response,'w')   ## write zip to response
    z.writestr("filename.csv", output.getvalue())  ## write csv file to zip

    return response
于 2009-09-10T06:37:31.840 に答える
5

動作している場合は ... を、動作していない場合はreturn responseを返すことに注意してください。zHttpResponse

だから:一時ファイルではなく、あなたのcsv_writerNOTを使ってください。response一時ファイルを圧縮します。圧縮されたバイトストリームを!responseに書き込みます。

于 2009-09-10T05:27:37.773 に答える