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>