2010/10/16

GAEで、世界よこんにちは #2

先週に引き続き、GAEのスタートガイド(Python)に従って、「Hello World」 に挑戦します。
今週はGAEの機能を使用してアプリケーションのブラッシュアップを行ないます。

6. ユーザーからの入力を受け付ける
webapp を使ったウェブ フォームの処理。チュートリアル通りに、「helloworld.py」 のコードをコピー&ペースト。
1. Mainページでテキストエリアに文字列を入力。
2. ボタンクリックで /sign ページにPostする。
とはいえ、Mainページとかsignページとかが物理的に存在するわけではない。
ハンドラは「helloworld.py」だけなので、Request中のURIで実行処理を分けているだけ。

7. データを永続化する
データストアの使用。世界中での分散処理によるデータアクセス処理が隠蔽されるので、どこからでもどのセッションからでも同じデータにアクセス可能。



[データ構造の定義(CRUD共通)]
1. モデルクラスを定義する(RDBのテーブルのカラムを決めるようなもの) 

[データの追加(C)]
1. モデルクラスのインスタンスを生成する
2. モデルインスタンスに値を詰める
3. モデルインスタンスの put() メソッドを呼ぶ

[データの取得(R)]
1. GQL(SQLのSELECT文。必ずSELECT * FROM model になる)オブジェクトを作成する
2. GQLオブジェクトをイテレーターとしてモデルインスタンスにアクセスする

[データの更新(U)]
1. モデルインスタンスに値を変更する
2. モデルインスタンスの put() メソッドを呼ぶ(i.e. 追加時と同じ) 

[データの削除(D)] 何故かスタートガイドには記述がありませんが...
1. モデルインスタンスの delete() メソッドを呼ぶ
あるいは
2. GQLオブジェクトを指定してdbクラスのdelete()メソッドを呼ぶ


8. コードとHTMLを分離する(Djangoテンプレートの使用)
Djangoのテンプレート エンジンはApp Engineの一部であり、 SDK にも含まれているとのこと。
前回、WebアプリケーションのフレームワークではDjangoの使用を諦めてwebappにしましたが、そのwebapp内Djangoのテンプレート機能が取り込まれてるようです。

HTMLテンプレート「index.html」を作成して画面デザインを持たせる。
「helloworld.py」 は以下の修正を行う。
1. 「index.html」で使用するデータを用意する
2. 「index.html」とデータをバインドしてレンダリングする
GQLオブジェクトへのイテレータ的アクセスも、HTML側のDjangoテンプレートに任せる。
3. 結果を Responseに出力する

9. 画像、CSS、JavaScript等の静的ファイルをWebサーバーで公開する
(通常)GAEでは、アプリケーションのディレクトリにファイルを置いても「URL/ファイル名」で自動的にアクセスできるわけではないとのこと。確かに、「8. コードとHTMLを分離する」でも直接「index.html」にアクセスせずに、「helloworld.py」で「index.html」を読み込んでいました。
Webへの公開は「app.yaml」にハンドラを追加することで可能になります。ハンドラは上から順にURIを正規表現でマッチングしていき、最初に見つかったもので終了。

スタートガイドに従ってスタイルシートを追加しました。

これでアプリケーションは完成です。
次はいよいよGAEへのアップですが、本日はここまで。ビールと餃子が呼んでいるので、続きはまた来週です。

10. おまけ
CMD.exeで立ち上げているWebサーバーですが、アクセス毎にログが出力されます。ブラウザからの HTTP-GET が 以下の順で呼ばれていることがよく分かります。
1. デフォルトのページ(成功)
2. スタイルシート(成功)
3. ファビコン(失敗:404 Not Found。そりゃ作ってないですから)
あと、Ctrl + C でWebサーバーを終了させるときに、ちょっと時間がかかるようです。慌てないでゆっくり待ちましょう。

See you next Saturday!

0 件のコメント:

コメントを投稿