CSVファイルをアップロードしてデータストアへ格納

アップロードするcsvファイルの文字コードsjisとした場合。

models.py

# -*- coding: utf-8 -*-
from django.utils.translation import ugettext_lazy as _
from google.appengine.ext import db

class Import(db.Model):
    # データ作成日時
    created_date = db.DateTimeProperty(auto_now = True, auto_now_add = True)
    # 名前
    name    = db.StringProperty()
    # 年齢
    age     = db.IntegerProperty()
    # 誕生日
    birthday = db.DateProperty()

views.py

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.template import Context, loader

from XXXXX.models import Import
import csv
import datetime

# アップロードしたCSVファイル内容をデータストアへ保存
def importcsv(request):
    upload_filename = 'csvfile'

    if request.method != 'POST' or not request.FILES.has_key(upload_filename) :
        c = Context()
        t = loader.get_template('importcsvform.html')
        return HttpResponse(t.render(c))

    csvrawfile = request.FILES[upload_filename]
    csvcontents = csv.reader(csvrawfile)
    for cont in csvcontents :
        if len(cont) > 0 :
            data = Import(
                name = unicode(cont[0], 'cp932'),
                age = int(cont[1]),
                birthday = getBirthday(cont[2])
            )
            data.put()

    alllist = Import.all()
    c = Context({'alllist': alllist})
    t = loader.get_template('importcsvresult.html')
    return HttpResponse(t.render(c))

def getBirthday(text):
    tlist = text.split('/')
    result = datetime.date(int(tlist[0]), int(tlist[1]), int(tlist[2]) )
    return result

template/importcsvform.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>import csv form</title>
<style type="text/css">
</style>
</head>
<body>
ファイル内文字コードはShift_JISとしてください。<br>
<br>
CSVフォーマットは以下の通り。<br>
名前,年齢,誕生日<br>
<form method="post" action="./importcsv" enctype="multipart/form-data">
<input type="file" name="csvfile">
<input type="submit" value="インポート">
</form>
</body>
</html>

template/importcsvresult.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>import csv form</title>
<style type="text/css">
</style>
</head>
<body>
<a href="./importcsv">フォームへ戻る </a><br>
<br>
名前 | 年齢 | 誕生日<br>
{% for val in alllist %}
{{ val.name }} | {{ val.age }} | {{ val.birthday }}<br>
{% endfor %}
</body>
</html>