Django SJISのCSVをダウンロードさせるビュー基底クラス

(コメント)

Django SJISのCSVをダウンロードさせるビュー基底クラス

# -*- coding: utf-8 -*-

from __future__ import unicode_literals, print_function

import csv
import io
from django.http import HttpResponse
from django.views.generic import View


class CsvExportViewBase(View):
output_as_sjis = True

def get(self, *args, **kwargs):
if self.output_as_sjis:
return self._get_response_as_sjis(*args, **kwargs)

response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = \
'attachment; filename={}'.format(self.get_filename())
writer = csv.writer(response)

for r in self.get_result_rows():
writer.writerow(r)
return response

def _get_response_as_sjis(self, *args, **kwargs):
response = HttpResponse(content_type='text/csv; charset=Shift-JIS')
response['Content-Disposition'] = \
'attachment; filename={}'.format(self.get_filename())
sio = io.StringIO()
writer = csv.writer(sio)

for r in self.get_result_rows():
writer.writerow(r)

response.write(sio.getvalue().encode(encoding='cp932'))
return response

def get_connection(self):
from django.db import connection
return connection

def get_cursor(self):
connection = self.get_connection()
return connection.cursor()

def get_sql(self):
"""
Implement required.
"""
return "SELECT NOW()"

def get_sql_args(self):
return []

def row_filter(self, row):
return row

def get_result_rows(self):

cursor = self.get_cursor()

cursor.execute(self.get_sql(), *self.get_sql_args())

# Header
yield self.row_filter(f[0] for f in cursor.description)

# Content
for r in cursor.fetchall():
yield self.row_filter(r)

def get_filename(self):
return "items.csv"

現在未評価

コメント

最近のツイート

  • 漫画全巻ドットコム@ポイント最大15倍!

    漫画全巻ドットコム@ポイント最大15倍! @mangazenkan

    ytyng

    おはようございます!さぁ、いよいよ始まります!加藤浩次さん司会のがっちりマンデー!!が、はじまります!みなさん、うちの濱田、ダンディーが、映ります! https://t.co/YQj2zxafqe
    3 週間, 1 日 前

  • ytyng

    ytyng @ytyng

    漫画全巻ドットコム またテレビ出ます! がっちりマンデー。日曜日放送です。サーバ増やして待ってます! @mangazenkan https://t.co/cFVryVA7kG https://t.co/ia5rUMIIfw
    4 週間 前

  • ytyng

    ytyng @ytyng

    やばい、機能がリリースされない! タイムゾーンか? サマータイム設定になってるのか? とか焦ってたら、リリース日になってなかっただけだった。今日月末じゃん。月初じゃないじゃん。1人で焦ってたけど結果1日得した気分
    2 ヶ月, 3 週間 前