2005/03/26 更新
あくまでもメモです。何でも思いついたことを書いてます。恥ずかしい間違いや勘違いもあると思います。間違い・勘違いを指摘していただくと、反映されるかもしれませんし、されないかもしれません。
Zope 3 のインストールの仕方の解説。
sample_principals.zcml を principals.zcml にコピーしてユーザーを書き換える。
zope.conf から設定を読み込むが、zope.conf がなかったら zope.conf.in を使う。
新しい Web ベース UI の使い方。
ZPT Page を Add して
| <h1 tal:content="context/zope:title">title hear</h1> |
と書いて Preview すると、ZPT の置いてあるフォルダのタイトルが表示される。
でも zope: って何だ?
http://localhost:8080/++apidoc++ にアクセスすると API ドキュメントが見られる
Zope 2 では、見せるページと、管理用画面(ZMI)の2つの世界が存在していたが、Zope 3 では、それらが Plone のように渾然一体となって存在している。
Zope 3 では、ZMI の skin をカスタマイズするようなことができる。
例えば、ZopeTop skin は http://localhost:8080/++skin++ZopeTop/
で見られる。
Zope3 では、Content Space と Software Space という2つの空間がある。
Software Space は、ソフトウェアロジック等が置ける Content Space の入れ物。
Content Space には、コンテンツが置ける。
Content Space のコンテンツは、Software Space を超えて獲得しない。
ZPT の i18n タグの翻訳を Software Space の default パッケージのTranslate で定義できる。
Package (Zope 2 の Product に相当)のインストールの仕方の解説。
例として、zwiki を svn から取ってきてインストールしている。
psycopgda についてはMLのアーカイブを参照。
フロントに Apache を置く方法について解説。
Zope 3 では(Zope 2 の Virtual Host Monster のような)特別なオブジェクトを
Add する必要はなく、RewriteRule を
|
RewirteRule ^/site(/?.*) \ http://localhost:8080/site/++vh++http:www.example.com:80/site/++$1 [P,L] |
という感じで書く
出版されている本にはない章
TTW で編集したコードは ZODB に置かれるが、それだと Subversion でバージョン管理したり、diff を取ったりできないので、Zope 3 では ZODB 上のオブジェクトをファイルシステム上のファイルに同期するツール zsync が用意されている。
その zsync の使い方の解説。
ZopeX3-3.0.0 には入ってなくて、現状あんまりメンテナンスされてないそうなのであまりまじめに読まないほうが良いかも。
Zope 3 本体の開発の手順(手続き)とか、コーディング(ネーミング)ルールとか、バグ報告の仕方とかの説明。
package を書くとか、使うだけのひとにはあんまり関係ない。
インターフェース入門
Zope 3 では、Java の interface のようなものを zope.interface のクラスを派生して作り、そのインターフェースを使うクラスを実装するようにする。
本章では、IExample という サンプルインターフェースと、それを使ったSimpleExample クラスのサンプルコードを例示している。
インターフェースのコードを書いたら、そこから Class を作ってくれる pyskel.py というスクリプトが用意されている。
pyskel.py は、Subversion のリポジトリにしかないみたい(http://www.python.jp/pipermail/python-ml-jp/2005-March/003232.html)
コンポーネント・アーキテクチャー入門
自分はよくわかってないが「デザイン・パターン」の本を読むとよいかも。
機能を果たす他のコンポーネントと連動しない関数みたいなもの。
CMF の Tool みたいなもの。
他のインターフェースを変換して橋渡しする glue components。
Utilities Services と同じように関数っぽい(Functional)ものだが、Serveices と違って、そのクラスがなくても Zope 3 自体は動作(サービス)できる。あると便利なもの、程度のもの。
うまく説明できないがとにかく Factory
CMF の skin と同じ考え方のもの。rotterdam(default), Basic, Debug, ZopeTop という skin がある
Zope 2 でいうところの Formulator に相当する機能の解説。
Schema と Field の API は apidoc の zope.schema.interfaces を見る。
Form は apidoc の zope.app.form.browser を見る。
あと、zope.schema package の README.txt を見るとよい(と本に書いてある)。
基本的な ZCML の書き方の解説・・・と言ってもこれだけ見てもわからない。
まずは、どっかの package のサンプルを見たほうが良いと思う。
本文中でも、 http://localhost:8080/++apidoc++/ を見て!と書いてある。
重要な namespace は、 zope, browser, meta, xmlrpc, i18n, help, mail あたり。
I18n の解説。だけど、この章の説明だけみてもよくわからん。
Plone 等で使われている Placeless Transaction Service と同じような仕組みらしい。
Zope 3 は Dublinc Core のメタデータを持てるよという話と、Dublin Core ( http://dublincore.org/ ) にこんなメタデータがあるよ、という話。
特別、Zope 3 だからどうという話はない。
Zope 2(Product) から Zope 3(package) へポーティングする場合の指針。(あんま、たいしたこと書いてない)
Zope 2 では、モデルとビューの機能が1つのクラスに渾然一体となっているので、モデルの部分だけをくくりだし、ビューと ZCMLでつなげる ・・・って感じ?
あと Five http://codespeak.net/z3/five/ を使うという話。
メッセージボードの Content を定義するクラスを作ってみる。
http://svn.zope.org/book/trunk/messageboard/step01
のソースの説明。
ページ単位に、
の繰り返し。
その他に
を ZCMLに書いてあげる。
お決まりのインターフェースやクラスを派生して、python のコードを書いて
ZCML に zope:view ディレクティブを書くとフォームができる、という話。
パーミッションの設定は、python のコードの中でなく、configure.zcml の中に書く。
どの View にどの permission が対応するかは、page ディレクティブや zope:view ディレクティブに書いてある(前章と前々章を参照)
サイズを返す ISized インターフェースを実装する例(Adapter の例)。
私は、adapter の良さをまだよく理解できていない。
package
の国際化。決まりごとに従えばよいだけだが、手順はいろいろと面倒。
メールによる Subscribe Unsubscribe を例に、Adapter の実装してみる。
メッセージボードのメッセージの Mail による購読の参加・退会機能。
ワークフローの定義の仕方。
State とか Transition は ZCML に記述する。
ツールなしにワークフローを定義するのは難しそう
ヘルプの文章を書く(StructuredText とか reStructuredText とか Textで)。
package の configure.zcml に help namespace で内容(ファイルへのパス)を記述。
FTP の機能の実装例。いろんなインターフェースを実装して、ZCML で指定。
FTP の機能が必要になったときに読めば良い。
XML-RPC サーバーの実装の仕方。
skin の考え方は、CMF に似てる。TTW で設定するのではなくて、ZCMLで定義してあげるところが違う。
IAnnotable インターフェースを持った Adapter の作成。
なんだか意味が良くわからないけど、とりあえず必要なさそう。
principal のプラグインの作り方。
例では、単純なファイルをソースにした Principal-source plugin を作ってみている。
principal に注釈を加える。例では、e-mail と IRC nick handle を加えてみている。
ZPT とかじゃなくて、単なるテキストとかイメージを browser リソースに加える。
単純に、browser:resources ディレクティブにファイル名とか、idとか指定する。
メッセージボードのメッセージの中のスマイリーマーク ;-) を png イメージの
ニコニコマークに変換する utility インターフェースを作ってみる。
Site 毎に、イメージのマッピングを変更できるスマイリー utility (前章と同じ)を作ってみる。
全文検索のテキストインデックスについて。ZopeX-3.0.0 には実装されていなくて、かつ、書籍には、この章は存在しない。
現状の記述だけではなんだかよく分からない。
リストボックスにキーワード一覧を出すような場合の語彙(Vocabulary)を Fields/Widgets
で使う例。
まだよく理解していない。
例外が発生した時の View のカスタマイズ。(Zope 2 の
standard_error_message の記述に相当)
高度な話題。とりあえず、すぐには読まなくてもよさそう。
Zope 3 本体の開発のために必要な内容みたい。
テストの書き方。
必要なんだけど似たような package からパクった方が早いと思う。
Zope 3 では、例えば svn から取得したディレクトリで
| $ python test.py |
を実行すると、パッケージのユニット・テストが行われるような仕組みになっている。