{"id":3398,"date":"2010-05-19T22:41:12","date_gmt":"2010-05-19T13:41:12","guid":{"rendered":"http:\/\/www.gesource.jp\/weblog\/?p=3398"},"modified":"2017-07-16T15:49:18","modified_gmt":"2017-07-16T06:49:18","slug":"googleappengine%e7%94%a8%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%af%e3%83%bc%e3%82%af-kay-%e3%81%a7%e7%94%bb%e5%83%8f%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad","status":"publish","type":"post","link":"https:\/\/www.gesource.jp\/weblog\/?p=3398","title":{"rendered":"GoogleAppEngine\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af Kay \u3067\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b"},"content":{"rendered":"<p>Google App Engine\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30afKay\u3092\u4f7f\u3044\u3001\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u65b9\u6cd5\u3002<\/p>\n<p>\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u30e2\u30c7\u30eb\u3092\u7528\u610f\u3057\u307e\u3059\u3002<br \/>\n\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306eBlobProperty\u3092\u7528\u610f\u3057\u307e\u3059\u3002<\/p>\n<pre><code>class ThumbnailImage(db.Model):\n    thumbnail = db.BlobProperty()\n<\/code><\/pre>\n<p>\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u305f\u3081\u306e\u30d5\u30a9\u30fc\u30e0\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306fFileField\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<pre><code>class UploadForm(forms.Form):\n    upload_file = forms.FileField(u'\u753b\u50cf\u30d5\u30a1\u30a4\u30eb', required=True)\n<\/code><\/pre>\n<p>\u30d5\u30a9\u30fc\u30e0\u306evalidate()\u3067\u306f\u3001\u5f15\u6570\u306brequest.form\u306b\u52a0\u3048\u3066\u3001request.files\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<br \/>\n(\u53c2\u8003\uff1a<a href=\"http:\/\/kay-docs-jp.shehas.net\/forms-usage.html#id8\" title=\"11.7. \u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 &mdash; Kay v0.10.0 documentation\">11.7. \u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 &mdash; Kay v0.10.0 documentation<\/a>)<\/p>\n<pre><code>if request.method == 'POST' and form.validate(request.form, request.files):\n<\/code><\/pre>\n<p><a href=\"http:\/\/code.google.com\/intl\/ja\/appengine\/docs\/python\/images\/\" title=\"Images Python API\">Images Python API<\/a>\u3092\u4f7f\u7528\u3057\u3066\u3001\u753b\u50cf\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002<\/p>\n<pre><code>uploaded_image = images.Image(form['upload_file'])\nuploaded_image.resize(width=100) #\u5e45\nthumbnail = uploaded_image.execute_transforms(output_encoding=images.JPEG)\n<\/code><\/pre>\n<p>\u753b\u50cf\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n<pre><code>image = ThumbnailImage(thumbnail=thumbnail)\nimage.put()\n<\/code><\/pre>\n<p>\u4fdd\u5b58\u3057\u305f\u753b\u50cf\u3092\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<pre><code>return Response(image.thumbnail, mimetype='image\/jpg')\n<\/code><\/pre>\n<p>\u5168\u4f53\u306e\u30b3\u30fc\u30c9\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>myapp\/views.py<\/p>\n<pre><code>from google.appengine.ext import db\nfrom google.appengine.api import images\nfrom kay.utils import (forms, render_to_response)\nfrom werkzeug import Response\n\nclass ThumbnailImage(db.Model):\n    thumbnail = db.BlobProperty()\n\nclass UploadForm(forms.Form):\n    upload_file = forms.FileField(u'\u753b\u50cf\u30d5\u30a1\u30a4\u30eb', required=True)\n\ndef index(request):\n    form = UploadForm()\n    if request.method == 'POST' and form.validate(request.form, request.files):\n        #\u753b\u50cf\u3092\u30ea\u30b5\u30a4\u30ba\u3057\u3066\u4fdd\u5b58\n        uploaded_image = images.Image(form['upload_file'])\n        uploaded_image.resize(width=100) #\u5e45\n        thumbnail = uploaded_image.execute_transforms(output_encoding=images.JPEG)\n        image = ThumbnailImage(thumbnail=thumbnail)\n        image.put()\n        #\u4fdd\u5b58\u3057\u305f\u753b\u50cf\u3092\u8868\u793a\n        return Response(image.thumbnail, mimetype='image\/jpg')\n\n    return render_to_response(\"myapp\/index.html\", \n                              {'form': form.as_widget()})\n<\/code><\/pre>\n<p>myapp\/templates\/index.html<\/p>\n<pre><code>{{ form() | safe }}\n<\/code><\/pre>\n<p>\u88dc\u8db3<br \/>\nblobstore\u3092\u4f7f\u3046\u65b9\u6cd5\u306f\u300c<a href=\"http:\/\/blog.shehas.net\/2009\/12\/18\/Kay-blobstore\" title=\"Kay \u3067\u3082 blobstore \u3092\u4f7f\u3046 (\u30b5\u30e0\u30cd\u30a4\u30eb\u3082)\">Kay \u3067\u3082 blobstore \u3092\u4f7f\u3046 (\u30b5\u30e0\u30cd\u30a4\u30eb\u3082)<\/a>\u300d\u304c\u53c2\u8003\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><iframe src=\"http:\/\/rcm-jp.amazon.co.jp\/e\/cm?lt1=_blank&#038;bc1=FFFFFF&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=gesource-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=1X69VDGQCMF7Z30FM082&#038;asins=4899772483\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google App Engine\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30afKay\u3092\u4f7f\u3044\u3001\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u65b9\u6cd5\u3002 \u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u30e2\u30c7\u30eb\u3092\u7528\u610f\u3057\u307e\u3059\u3002 \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306eBlobProperty\u3092\u7528\u610f\u3057\u307e\u3059\u3002 &#8230;<\/p>\n<p><a href=\"https:\/\/www.gesource.jp\/weblog\/?p=3398\" class=\"more-link\">Continue reading &lsquo;GoogleAppEngine\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af Kay \u3067\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b&rsquo; &raquo;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[96,95,7],"tags":[68,94,143],"class_list":["post-3398","post","type-post","status-publish","format-standard","hentry","category-googleappengine","category-kay-programming","category-python","tag-google-app-engine","tag-kay","tag-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=\/wp\/v2\/posts\/3398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3398"}],"version-history":[{"count":0,"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=\/wp\/v2\/posts\/3398\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gesource.jp\/weblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}