今週はGAEの機能を使用してアプリケーションのブラッシュアップを行ないます。
6. ユーザーからの入力を受け付ける
webapp を使ったウェブ フォームの処理。チュートリアル通りに、「helloworld.py」 のコードをコピー&ペースト。
1. Mainページでテキストエリアに文字列を入力。
2. ボタンクリックで /sign ページにPostする。
とはいえ、Mainページとかsignページとかが物理的に存在するわけではない。2. ボタンクリックで /sign ページにPostする。
ハンドラは「helloworld.py」だけなので、Request中のURIで実行処理を分けているだけ。
7. データを永続化する
データストアの使用。世界中での分散処理によるデータアクセス処理が隠蔽されるので、どこからでもどのセッションからでも同じデータにアクセス可能。
[データ構造の定義(CRUD共通)]
[データの追加(C)]
[データの取得(R)]
[データの更新(U)]
[データの削除(D)] 何故かスタートガイドには記述がありませんが...
データストアの使用。世界中での分散処理によるデータアクセス処理が隠蔽されるので、どこからでもどのセッションからでも同じデータにアクセス可能。
[データ構造の定義(CRUD共通)]
1. モデルクラスを定義する(RDBのテーブルのカラムを決めるようなもの)
[データの追加(C)]
1. モデルクラスのインスタンスを生成する
2. モデルインスタンスに値を詰める
3. モデルインスタンスの put() メソッドを呼ぶ
2. モデルインスタンスに値を詰める
3. モデルインスタンスの put() メソッドを呼ぶ
[データの取得(R)]
1. GQL(SQLのSELECT文。必ずSELECT * FROM model になる)オブジェクトを作成する
2. GQLオブジェクトをイテレーターとしてモデルインスタンスにアクセスする
2. GQLオブジェクトをイテレーターとしてモデルインスタンスにアクセスする
[データの更新(U)]
1. モデルインスタンスに値を変更する
2. モデルインスタンスの put() メソッドを呼ぶ(i.e. 追加時と同じ)
2. モデルインスタンスの put() メソッドを呼ぶ(i.e. 追加時と同じ)
[データの削除(D)] 何故かスタートガイドには記述がありませんが...
1. モデルインスタンスの delete() メソッドを呼ぶ
あるいは
2. GQLオブジェクトを指定してdbクラスのdelete()メソッドを呼ぶ
あるいは
2. GQLオブジェクトを指定してdbクラスのdelete()メソッドを呼ぶ
8. コードとHTMLを分離する(Djangoテンプレートの使用)
Djangoのテンプレート エンジンはApp Engineの一部であり、 SDK にも含まれているとのこと。
前回、WebアプリケーションのフレームワークではDjangoの使用を諦めてwebappにしましたが、そのwebapp内Djangoのテンプレート機能が取り込まれてるようです。
HTMLテンプレート「index.html」を作成して画面デザインを持たせる。
「helloworld.py」 は以下の修正を行う。
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 が 以下の順で呼ばれていることがよく分かります。
See you next Saturday!
HTMLテンプレート「index.html」を作成して画面デザインを持たせる。
「helloworld.py」 は以下の修正を行う。
1. 「index.html」で使用するデータを用意する
2. 「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サーバーを終了させるときに、ちょっと時間がかかるようです。慌てないでゆっくり待ちましょう。2. スタイルシート(成功)
3. ファビコン(失敗:404 Not Found。そりゃ作ってないですから)
See you next Saturday!
0 件のコメント:
コメントを投稿