db.Model



db.Modelを使ったシンプルな例を紹介する。このプログラムは、GoogleAppEngineのPython環境で実行できる。

Hello DataStore

データストアに”hello”メッセージを追加していく例。

ソースコード

  • 1行目
    おまじない。
  • 2行目~3行目
    プログラム内で使うモジュールをインポート。
  • 5行目~9行目
    MainHandler: ルートディレクトリへのアクセスに対応する。
    投稿用のリンクと、データストア内のデータを表示する。
  • 11行目~14行目
    PostHandler: ルートディレクトリへのアクセスに対応する。
    Entryオブジェクトを1つ生成し、データストアに保存。
    処理が終わったらルートディレクトリにリダイレクトする。
  • 16行目~17行目
    データモデルを定義
    Entryはmessageという名前のStringPropertyを持っている
  • 19行目~21行目
    リクエストハンドラーを定義
    リクエストされたURLと、リクエストハンドラの対応関係を指定する
  • 23行目~24行目
    おまじない

ソースコードは以下の通り。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
from google.appengine.ext import webapp, db
from google.appengine.ext.webapp import util

class MainHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write('<a href="/post?phpMyAdmin=cfc2644bd9c947213a0141747c2608b0">post</a><br>') #投稿用リンク
        for entry in Entry.all(): #Entryタイプのすべてのデータをループ
            self.response.out.write(entry.message + '<br>') #entryのmessage属性を表示

class PostHandler(webapp.RequestHandler):
    def get(self):
        Entry(message = "hello").put() #Entryオブジェクトを生成し、保存
        self.redirect('/') #ルートディレクトリにリダイレクト

class Entry(db.Model): #Entryモデルの定義
    message = db.TextProperty() #messageという名前のTextPropertyを1つもつ

def main(): #リクエストハンドラ ルートディレクトリはMainHandler、/postディレクトリはPostHandlerが処理
    application = webapp.WSGIApplication([('/', MainHandler),('/post', PostHandler)], debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

実行結果

最初はpostと書かれたリンクだけが表示されます。

リンクをクリックするとhelloが1つ表示されます。

クリックした回数だけhelloの表示個数が増えます。

更新履歴

  • 2011年01月22日 公開
  • 2011年02月16日 ソースコードを整理 / ソースコードの説明を加筆修正

Facebook comments:

comments

Leave a Reply


Get Adobe Flash player