第1回「Zope 3の魅力に迫る」では、Zope 3の特徴を紹介したほか、Zope 3/Grokの環境設定とインストールを行いました。
それでは、前回、grokprojectコマンドで作成したプロジェクト「Sample」を使って、アプリケーションの開発方法を順を追ってみていきたいと思います。
プロジェクトディレクトリの確認
grokprojectが作ったSampleディレクトリの中身を確認していきましょう。
binディレクトリには第1回で作ったサーバ起動用のスクリプトをはじめ、開発中に使ういくつかのコマンドがあります。parts/dataディレクトリには、Zopeのオブジェクトデータベース(ZODB)のデータが保存されます。src/sampleディレクトリには、アプリケーションのソースコードが置かれています。アプリケーションの開発はここで行います。
そのほかのファイルやディレクトリも含めて、grokprojectが生成したファイルやSampleディレクトリはzc.buildoutによって管理されます。zc.buildoutについては次回以降で触れたいと思います。いまのところ、気にする必要はありません。
次に、src/sampleディレクトリの中身を確認しましょう。
app.pyはアプリケーションのエントリポイントです。この時点ではgrokprojectが生成したひな型のソースコードが入っています。これが最も重要なファイルです。後で編集していきます。また、app_templatesはapp.pyのプログラムがHTMLを生成するために使うテンプレートファイル置き場です。
configure.zcmlは、Zope 3のDI用の設定ファイル(ZCML)です。Grokを使う場合、アプリケーション開発者が自身でこれを書く必要はありません。このファイルはあなたのアプリケーションがGrokを使うことを宣言しています。これはそのままで構いません。
testing.pyとftesting.zcmlは、あなたのアプリケーションのユニットテストのためのひな型です。テストは今後追加していきますが、いまのところ、触らなくて構いません。
__init__.pyはこのディレクトリをPythonパッケージにするために置いてあります。中身は空です。
ひな型のアプリケーションの仕組み
それでは、app.pyの中身を見ていきます。以下はapp.pyのソースコードです。
import grok |
Sampleクラスは、grok.Applicationクラスを継承しているのでアプリケーションのエントリポイントになり、管理画面でアプリケーションとして追加可能になります。また、grok.Containerを継承しているので、モデルを提供するコンポーネントになります。ここでは永続オブジェクトとなり、データを格納する役割になります。
Indexクラスは、grok.Viewクラスを継承しているので、ビュー(表示機能)を提供するコンポーネントになります。ここではHTMLを生成することがビューとしての役割になります。
ソースコードには以上のことしか書かれていませんが、Grokは次のようなコンポーネントの関連付けを暗黙に行います。
Indexクラスは、Sampleクラス用のindexという名前の表示コンポーネントになります。app_templatesディレクトリは、app.py(appモジュール)用のテンプレートを入れるディレクトリになります。
app_templates/index.ptは、Indexクラスで使われるテンプレート(.ptはZopeで使われているZope Page Templateというテンプレート言語ファイル用の拡張子)になります。app_templates/index.ptファイルの中身は次のとおりです。
<html> |
app_templates/index.pt |
名前を使った暗黙の関連付け機能は、いまどきのWebアプリケーションフレームワークでよく使われている手法です。GrokはこれによってZope 3を気軽に使えるようにしています。ちなみに、Zope 3を直接使った場合、コンポーネント同士の関連付けはZCMLを使って開発者が明示的に行います。
以上の仕組みによって、先ほど管理画面で試しに追加したアプリケーション(名前はtest)のURL「http://localhost:8080/test/index」にアクセスすると、
Congratulations! |
と表示されます。「http://localhost:8080/test」にアクセスしても同じ結果になるのは、indexという名前がデフォルトの表示コンポーネント名として使われているためです。表示名を省くとデフォルトのindexを指定したことになります。
ビューの追加
それでは、新しいビューを追加してみましょう。新しいapp.pyは次のとおりです。
import grok |
新たにHelloWorldという名前のビュークラスを追加しました。このクラス用のテンプレートも追加します。
<html> |
add_templates/helloworld.pt |
以上の変更を加えたら、サーバを再起動して「http://localhost:8080/test/helloworld」にアクセスしてください。すると、Webブラウザに、
Hello world |
と表示されます。
次に、CSSファイルをHTMLに入れてみましょう。staticディレクトリを作って、その中にmain.cssを保存してください。
h1 {color:red}; |
static/main.css |
helloworld.ptを以下のように編集します。
<html> |
add_templates/helloworld.pt |
main.cssを読み込む行を追加しました。tal:attributesという部分がZope 3のテンプレート言語で書かれた個所です。これはlinkタグのhref属性の値を動的にmain.cssのURLに置き換えています。
staticというディレクトリは、Grokのアプリケーションで共通の静的ファイルの置き場所です。テンプレート用のディレクトリと違ってモジュールごとに分かれていません。
以上の変更を加えたら、サーバを再起動して、もう一度「」にアクセスしてください。今度は赤い文字でHellow worldが表示されたと思います。main.cssのパスは、
/test/@@/sample/main.css |
となっています。「@」はZope 3でビューコンポーネントを呼び出すときの特殊な記号として使われています。特に意識する必要はありませんので、そういうものだと思ってください。
静的な画像も同様のやり方で追加できます。ユーザーがアップロードしないアプリケーション共通のアイコン画像などはこのやり方で管理するといいでしょう。
1/3 |
Index | |
ビュークラスとZPTを使って簡易RSSリーダ作成 | |
Page1 プロジェクトディレクトリの確認 ひな型のアプリケーションの仕組み ビューの追加 |
|
Page2 動的なビューを作るプログラム ビュークラスを使うZPTを追加する |
|
Page3 Webブラウザからの入力に対応させる |
Zope 3とは何ぞや? |
Coding Edgeお勧め記事 |
いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|