Base View Class for Downloading CSV in SJIS with Django

Django
2017-05-09 17:49 (7 years ago) ytyng

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"

Current rating: 1
The author runs the application development company Cyberneura.
We look forward to discussing your development needs.

Comments

Archive

2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011