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()
本当にこれだけです。
データベースの設定とかいりません!!
超簡単です。
本当に凄いんです!!
正直、ここまで凄いと思っていませんでした。
ぶっちゃけ Django のホスティングサービスくらいに思ってましたが
Django 使わなくても全然かまわないです。
今まで web アプリの入門的な簡単なアプリとかは
Perl か PHP で書いてレンタルサーバに置くのが一番楽でしたが
それを越えてるとおもいます。
しかも、Python 勉強中の僕でも
説明聞いて 2時間で出来ちゃいました。
認証機能やデータベースまで含めて
こんなに簡単に出来るなんて凄すぎる><
今、新しく web アプリ作るなら
選択肢の一つとして Google App Engine は完全に アリ だと思います。
Python 温泉は Google App Engine で遊んでみようとおもいます!!