Google App Engineも第4回です、いよいよ今回はデータストアを使います。
しかし、Googleのドキュメントを読んでたのですが難しくてよくわかりません><

ですが最低限必要な知識だけでなんとか動くものを作る、それくらいだとなんとかなるものです。
本当に必要なものだけを使って簡単なゲストブックを作りたいと思います。ゲストブックに必要なものは「名前・コメント・時間」、これだけあればなんとかなります。目指すはこのシンプルなゲストブック!

スクリーンショット

Googel App Engineのデータストアでは、プログラムの中で定義をして利用するといった使い方になります。

それではデータストアに保存されるデータの定義部分です。

class Message(db.Model):
  name = db.StringProperty()
  comment = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)

db.Modelを継承したMessageクラスです。
また、データストアのデータオブジェクトをエンティティ、それぞれのデータの種類が設定された値をプロパティと呼びます。これらの用語の意味がわからないならスルーしても問題ありません。続けていくことによって、いつか「こういう意味なのか!」って瞬間がくるとおもいます。ぼくもよくわかってません><
StringProperty()、DateTimeProperty()などでそれぞれのデータを定義します。
multiline=Trueは改行を許可する、auto_now_add=Trueは現在時刻を自動で登録するなどのオプションとなります。

プログラムは、データとフォームを表示するMainpage部分とデータを追加するAddcomment部分です。


import cgi

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

#DBモジュールをインポートする
from google.appengine.ext import db

#モデル部分
class Message(db.Model):
  name = db.StringProperty()
  comment = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)

#データとフォームを表示する部分です。
class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write('<html><body>')

    #登録済みのデータの取得部分です。
    #SQLに似たGQLを使います、最新の投稿を10件取得します。
    messages = db.GqlQuery("SELECT * FROM Message ORDER BY date DESC LIMIT 10")

    #返って来たデータを一件ずつ処理して行きます。
    for message in messages:
      #もし名前が登録されていれば、その名前を表示。
      #登録されていなければnanashiと表示させます。
      if message.name:
        self.response.out.write('%s :' % cgi.escape(message.name))
      else:
        self.response.out.write('nanashi:')

      #コメントと日付を表示します 「名前:コメント(日付)」といったふうに表示されます。
      self.response.out.write(' %s ' % cgi.escape(message.comment))
      self.response.out.write(' (%s) <br />' % message.date)

    #登録済みのデータが表示されたら、フォームを表示します。
    #それぞれの項目名はモデルのname,commentと連動しています。
    self.response.out.write("""
          <form action="/add" method="post">
            <div>
                name<br />
                <input type="text" name="name" value="" cols="60"></textarea>
            </div>
            <div>
                comment<br />
                <textarea name="comment" rows="3" cols="60"></textarea>
            </div>
            <div>
                <input type="submit" value="submit">
            </div>
          </form>
        </body>
      </html>""")

#投稿されたデータをデータストアに登録する部分です。
class Addcomment(webapp.RequestHandler):
  #メソッドはPOSTです。
  def post(self):
    #messageはモデルクラスのインスタンスです。
    message = Message()

    #投稿されたデータを対応させます。
    message.name = self.request.get('name')
    message.comment = self.request.get('comment')
    #データの登録はput()だけですみます。すごい!
    message.put()
    #登録がすむと、通常ページにリダイレクトします。
    self.redirect('/')

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/add', Addcomment)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

データストアが出てくると、とたんに用語が増えて混乱してきます><
ですが、データを扱えるようになると世界が広がります。すこしづつ、すこしづつやって行きたいと思います。今回のエントリも用語の使い方について自信ありませんが、それでもなんとか動くものが作れました。まだまだGoogle App Engineの入り口にたったばかりです。なんとか、がんばります。