今回は、新機能のメインとなる、ストレージサービスを使ってユーザごとの設定を保存する部分を作り込む。
データモデルの定義
今のところ「設定画面(ビュー)」で設定可能なのは「Blog ID」のみ。したがって、データモデルもこの ID を保持するプロパティだけで良い。型は文字列(→ StringProperty
)。
ただ、管理とデバッグが容易になると想定して、「account」と「mod_time」を加えておく。この 2 つは、画面からは変更できないもので、それぞれ(ログインしている)ユーザ情報と設定が変更された日時を保持するために用いる。
config と setting
「設定画面」は別にして、他の画面では設定項目がストレージサービスに保管されたユーザ設定(の項目)なのか、あるいは(これまでの)構成情報(config.yaml)に書かれたものなのかを意識したくはない。このため util.get_settings()
を用意し、ユーザ設定と構成情報をラップすることにした。
具体的には、以下のようにして「Blog ID」にアクセスできる。これで、ログインしていないとき、あるいはログイン中であってもストレージに設定が保管されていないときなどのように、ユーザ設定として「Blog ID」の値が存在しないときは、構成情報(config.yaml)に書き込まれたものが返される。
(設定情報の利用方法) blog_id = util.get_settings().get('blog_id')
設定画面
画面は「GAE アプリでユーザごとの設定を可能にする #3」に書いた通りの簡単なもの。
リクエストハンドラ(SettingsViewHandler
)の get
メソッドは、これまでの他のハンドラのものと大差ない。違いは、フィードではなくユーザ設定の内容を表示するという点だけだ。また、このハンドラ内では上述のラッパーを利用せず、データモデルとしてのユーザ設定に直接アクセスしている。
一方、このハンドラはフォームからの POST 要求を扱うための post
メソッドが定義されている。「Save Settings」か「Delete Settings」かを判別し、model.UserSettings.put()
か model.UserSettings.delete()
を呼ぶコードになっている。また、「Save Settings」の処理では、データのごく簡単な検証も行っている(空文字列ではないか、と同じ文字列が指定されていないか、の 2 点だけ)。
その他の変更
app.yaml
設定画面はログイン状態であることが前提なので、「login: required
」を付けている。また、今回からアプリバージョンを 2 に上げた。
(app.yaml) application: bloggerglass version: 2 [...snip...] handlers: [...snip...] - url: /settings/.* script: settingsview.py login: required [...snip...]
info.py
設定画面用の SettingsViewInfo
の定義を追加した。
main.py と postview.py
これまで構成情報(config.yaml)を参照していた「blog_id」を、上述のようにユーザ設定と構成情報をラップした util.get_settings()
経由で参照するように変更した。
これでバージョン 2
すでに書いたように、今回の配備からapp.yaml 中のアプリバージョンを 1 から 2 に上げた。これには、今回の機能追加ではユーザサービスとストレージサービスを使うようになり今までとは違う、という意味を込めたつもりだ。
バージョンを上げる際には管理コンソールでの操作が必要になる。アプリバーションを上げた app.yaml を配備するだけでは、アプリのデフォルトバージョンは旧バージョンがのままになっている。新バージョンをデフォルトにするには、アプリの管理コンソールから「Administration」>「Versions」を開き、新バージョンを選んで「Make Default」ボタンを押す。
ストレージサービスを使うことで、コードだけではなく、サーバ上に保管されたデータの管理も必要になる。実はまだ、データの保守管理についてはほとんど調べていない。たとえば、データモデルを更新した(プロパティの追加等)場合に、従来のデータをどうやって更新すれば良いのか、データのバックアップやリストアは可能なのか、といったこともわからない。この先、設定可能項目を増やす際には、アプリ外でのデータの取り扱いについて調べる必要がある。
関連リンク
- Python Datastore API (GAE 公式ドキュメントより)
- Blogger Glass (GAE アプリ)
0 件のコメント:
コメントを投稿