画像をデータストアへ保存&データストアの画像を画面へ出力

urls.py とかは随時適切に記述

models.py

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

class Image(db.Model):
    # 画像を登録した日時
    created_date = db.DateTimeProperty(auto_now_add=True)
    # 画像データ:バイナリ
    image = db.BlobProperty()
    # 画像サイズ
    imgsize = db.IntegerProperty()
    # 画像タイプ:mimetype
    imgtype = db.StringProperty()

views.py

# -*- coding: utf-8 -*-
from django.http import HttpResponseRedirect, HttpResponse
from XXX.models import Image

# ファイルアップロードフォーム表示
def imageform(request):
    result = '''
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>file upload</title>
</head>
<body>
<form method="post" action="./imageupload" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="submit" value="アップロード">
</form>
<br>
<br>
<a href="./imagedisplay">アップロード画像一覧</a>
</body>
</html>
'''
    return HttpResponse(result, mimetype='text/html')

# ファイルアップロード処理
def imageupload(request):
    if request.method == 'POST' and request.FILES.has_key('photo') :
        photo = request.FILES['photo']
        imagemodel = Image()
        imagemodel.image = photo.read()
        imagemodel.imgsize = photo.size
        imagemodel.imgtype = photo.content_type
        imagemodel.put()

        pr = {}
        pr['charset'] = photo.charset
        pr['content_type'] = photo.content_type
        pr['name'] = photo.name
        pr['size'] = photo.size
        # サイズだけなら len() でもとれる
        # pr['size'] = len(photo)

        return HttpResponse('アップロード完了', mimetype='text/html')
    return HttpResponse('アップロードする画像がない', mimetype='text/html')

# ファイル閲覧
def imagedisplay(request):
    # とりあえず最新の1件を取得して出力するところまで
    image_list = Image.all().order('-created_date').fetch(1)
    image_data = image_list[0]
    data = image_data.image
    imgtype = str(image_data.imgtype)
    return HttpResponse(data, mimetype=imgtype)