Google App Engine が凄すぎる気がしてきた

Google Developer Day 2008 に行ってきました。

で、基調講演聞いたあと、Google App Engine のコードラボに参加してきました。
まぁ簡単に言うと Hackathon です。

画像掲示板つくってみる

  • ユーザ登録&認証
  • コメント付加
  • 古いデータは消す

な画像掲示板を書いてみました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wsgiref.handlers, cgi

from google.appengine.api import images

from google.appengine.api import users
from google.appengine.ext import webapp,db

class ImageAndText(db.Model):
    user = db.UserProperty()
    date = db.DateTimeProperty(auto_now_add=True)
    image = db.BlobProperty()
    text = db.TextProperty()

class MainPage(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url(self.request.uri))
        self.response.out.write("""
          <form action="/edit" enctype="multipart/form-data" method="post">
            <div><textarea name='text' ></textarea></div>
            <div><label>photo:</label></div>
            <div><input type="file" name="img"/></div>
            <div><input type="submit" value="photo upload"></div>
          </form>""")
        self.response.out.write('<ul>')
        query = ImageAndText().all()
        limit = 10
        items = query.order('-date').fetch(limit=limit)
        for item in items:
            self.response.out.write('<li>')
            self.response.out.write('<div>%s</div>' %  cgi.escape(item.text))
            self.response.out.write('<div><img src="/photo/%s" /></div>' % item.key())
            self.response.out.write('<div>%s post by %s</div>' % (item.date, item.user.nickname()))
            self.response.out.write('</li>')
        self.response.out.write('</ul>')
        count = query.count()
        if count > limit:
            items = query.order('-date').fetch(offset=limit, limit=count-limit)
            for item in items:
                item.delete()

class EditPage(webapp.RequestHandler):
    def post(self):
        user = users.get_current_user()
        imageAndText =  ImageAndText()
        imageAndText.user = user
        data = self.request.get("img")
        imageAndText.image = db.Blob(data)
        imageAndText.text = self.request.get('text')
        imageAndText.put()
        self.redirect('/')

class Photo(webapp.RequestHandler):
    def get(self,photoid):
        image = ImageAndText.get(photoid).image
        self.response.headers['Content-Type'] = 'image/jpeg'
        self.response.out.write(image)
        return

def main():
    application = webapp.WSGIApplication(
        [('/',MainPage),
         ('/edit',EditPage),
         ('/photo/([^/]+)',Photo)],
        debug=True)
    wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
    main()


本当にこれだけです。
データベースの設定とかいりません!!
超簡単です。

http://yoshioris.appspot.com/

本当に凄いんです!!

正直、ここまで凄いと思っていませんでした。
ぶっちゃけ Djangoホスティングサービスくらいに思ってましたが
Django 使わなくても全然かまわないです。


今まで web アプリの入門的な簡単なアプリとかは
PerlPHP で書いてレンタルサーバに置くのが一番楽でしたが
それを越えてるとおもいます。

しかも、Python 勉強中の僕でも
説明聞いて 2時間で出来ちゃいました。
認証機能やデータベースまで含めて
こんなに簡単に出来るなんて凄すぎる><

今、新しく web アプリ作るなら

選択肢の一つとして Google App Engine は完全に アリ だと思います。
Python 温泉は Google App Engine で遊んでみようとおもいます!!