前回のリファクタリング構想にしたがい、実装を行う。
表示内容を保持するオブジェクト
アプリ固有の情報を AppInfo オブジェクト、ビュー(前回まではページと呼んでいた)固有の情報を ViewInfo オブジェクトに収めることにした。ただし、ViewInfo オブジェクトはビューの種類(一覧表示と内容表示)ごとにサブクラス化して使う。
|
これら表示内容オブジェクトは src/info.py で定義している。
AppInfo
アプリ固有の情報を保持するため、すべてのビューで使われる。このオブジェクトが保持するのは、基本的に config.yaml で設定する情報だ。
| プロパティ名 | 説明 |
|---|---|
| lang | 生成される HTML に対する言語指定。具体的には html 要素の lang 属性の値を指定する。 |
| title | アプリのタイトル。html/head/title 要素の内容になることを想定している。 |
| stylesheet | 生成される HTML で使用されるスタイルシート。 |
| home_url | アプリのトップ URL。 |
ListViewInfo
一覧表示ビューで表示する情報を保持する。
| プロパティ名 | 説明 |
|---|---|
| page | 表示するページ番号。 |
| total_pages | 全ページ数。 |
| content | フィードにふくまれる entry 要素のデータ。実際には Entry (後述) のリストになっている。 |
ListViewInfo.content は (main.py で定義している) Entry のリストであり、Entry は以下のプロパティを持つ。
| プロパティ名 | 説明 |
|---|---|
| title | 記事のタイトル。 |
| feedlink | 個別記事のフィードへの URL。 |
PostViewInfo
内容表示ビューで表示する情報を保持する。
| プロパティ名 | 説明 |
|---|---|
| title | 記事のタイトル。 |
| permalink | Blogger の個別記事への permalink。 |
| content | 記事の内容となるテキスト。実際には Unicode 文字列になっている。 |
リクエストハンドラの変更
MainHandler (main.py で定義、一覧表示リクエストを処理する)、PostViewHandler (postview.py で定義、内容表示リクエストを処理する)ともに、template.render にわたすディクショナリに直接値を詰めるのではなく、AppInfo と ViewInfo (のサブクラス) オブジェクトを用意するように変えた。
その他の修正
前回のリファクタリング・プランにはなかったが、feed/core.py で定義していた Entry クラスを削除した。このクラスは Atom フィードにふくまれる entry 要素のデータを保持するためのものだが、単純にディクショナリ型オブジェクトとして保持することに変えたため不要になった。
またこれにともない、AtomFeed と AtomPostFeed でも解析後にデータを保持する方法を修正している。
関連リンク
- 3.8 マップ型 (Python ライブラリリファレンス; PyJUG)
- mnbi/bloggerglass (github)
- Blogger Glass (GAE アプリ)

0 件のコメント:
コメントを投稿