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と書かれたリンクだけが表示されます。
更新履歴
- 2011年01月22日 公開
- 2011年02月16日 ソースコードを整理 / ソースコードの説明を加筆修正