GAEpでiPhone向けWebアプリを作る (5)GAEp 上にモデルを定義する
前回の続きです。
GAEp 上にモデルを定義する
ようやくGAEpのソースコードが出てきます。
モデルの整理
今回の ToDo アプリで必要な要件を整理します。
* ひとつの ToDo を表すアイテム(ToDo アイテム)が存在する
* ひとつの ToDo アイテムは、必ず誰かのアイテムである(必ず誰かが所有する)
* ひとつの ToDo アイテムには、いつまでに何をなすべきか、が指定されている
非常に簡単です。
モデルを定義する
以下のようにモデル(カインド)を定義します。
models.py内
from google.appengine.ext import db class ToDoItem(db.Model): owner = db.UserProperty(required=True) title = db.StringProperty(required=True) detail = db.TextProperty() reg_date = db.DateTimeProperty(auto_now_add=True) deadline = db.DateTimeProperty(required=True)
GAEp のデータストアに格納するために、Model クラスを継承します。このクラスは、google.appengine.ext.db パッケージに格納されています。
ToDoItem クラスには、5つのプロパティが定義されています。
- owner
- ひとつ ToDo アイテムの所有者。必須
- title
- ToDo 内容。通常ここに何をすべきかを記載する。必須
- detail
- ToDo 内容の詳細。
- reg_date
- この ToDo アイテムの登録日
- deadline
- この ToDo アイテムの締め切り。必須
各データ項目は、Property クラスを継承した各クラスで定義しています。どのようなプロパティが GAEp で定義されているかは下記で確かめられます。
また、Property のコンストラクタに required 引数と auto_now_add 引数を使用しています。
required 引数は Properyty クラスのコンストラクタ引数です。これによりプロパティに None を入れるとエラーが返ります。他にもコンストラクタ引数があります。下記参照。
auto_now_add 引数は DateTimeProperty クラス固有のプロパティで、インスタンス作成時にその時点の時刻を自動で代入します。下記を参照してください。
deadline については、仕様的には DateProperty でも充分です。
モデルインスタンスの作成、変更、保存、削除
上記のように作成したモデルのインスタンス(エンティティ)のライフサイクルに関する操作を簡単に記載します。
エンティティの作成は、以下のようにします。
item = ToDoItem(owner=user, title=s_title, deadline=dt_deadline)
required なプロパティはコンストラクタ引数で初期化しています。これらを初期化しなければ、エラーとなります。
item = ToDoItem() # 必須なプロパティが初期化されていないのでエラー
コンストラクタ引数なしでエンティティ作成したい場合は、プロパティのコンストラクタ引数に default を None 以外の値で指定しておく
変更は以下のようにします。
item.detail = 'この ToDo アイテムの詳細はこれこれです'
required なプロパティには、None を代入できない点にだけ注意。
変更したら、保存は以下のようにします。
item.put()
コンストラクタで作成しただけではデータは保存されていません。保存は必ず put() メソッドで。
最後に、いらなくなったエンティティの削除は以下です。
item.delete()
今回はここまで。拍子抜けするくらい簡単です。
参考
Google App Engine については、基本的に Google が公開しているデベロッパーガイドを見ればだいたいのことはわかります。内容もわかりやすいです。
特に、Google App Engine Python については、以下です。
- http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/
- http://code.google.com/intl/ja/appengine/docs/python/overview.html
基本的にはこれらのサイトを見ればほとんどのことはわかりますが、その他に僕は以下の本を参考にしています。
- 作者: Dan Sanderson
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2009/11/15
- メディア: ペーパーバック
- クリック: 29回
- この商品を含むブログ (6件) を見る
和訳も出ているようです。
- 作者: Dan Sanderson,玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/01/24
- メディア: 大型本
- 購入: 5人 クリック: 414回
- この商品を含むブログ (27件) を見る