Base View Class for Downloading CSV in SJIS with Django
Django
2017-05-09 08:49 (8 years ago)

Base View Class for Downloading SJIS CSV in Django
# -*- 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"
Please rate this article
Currently unrated
The author runs the application development company Cyberneura.
We look forward to discussing your development needs.
We look forward to discussing your development needs.