今までは、URL http://localhost:8000 がRootクラスのindexメソッドへの呼び出しを引きおこすのをみてきました。URL http://localhost:8000/viewResult がRootクラスのviewResultメソッドへの呼び出しとなります。
これらの疑問に答えてみましょう。
まず最初に、ソースファイルに以下のClassNameという名前のCherryClassを宣言する時、:
CherryClass ClassName:
となります。この場合、CherryPy(または、もう少し正確にいうとCherryPyによって生成された実行ファイル)はclassNameと呼ばれるこのクラスのインスタンスを自動的に作成します。これは1文字目が小文字で始まるクラス名です(これはなぜCherryClass名が常に大文字から始まるのかという答えです)。
このインスタンスはグローバル変数であり、プログラムのどこからでもアクセスすることができます。
URLにもとづき、CherryPはどのクラスのインスタンスのどのメソッドを呼び出すべきなのかを知るのでしょうか?
それは簡単なメカニズムを使います:
URL host/dir1/dir2/dir3/pageの場合、dir1_dir2_dir3.page()メソッドを呼び出します。よって、これはあなたのプログラムがDir1_dir2_dir3と呼ばれるCherryClassを持ち、これはpageと呼ばれるメソッドをもつだろうと期待されているのでしょう。
2つの特別な場合があります:
- もし第1ディレクトリがない場合(いいかえると、URLはhost/pageという形になります)、root.page()メソッドを呼びます。これはURL host/pageとhost/root/pageはどちらも完全に同じということです。
- もし第1ディレクトリと第1ページがない場合(いいかえると、このURLはホスト名だけということです)、root.index()メソッドを呼びます。
重要: CherryPy-0.9では新しい機能が追加されています。もしhttp://localhost:8000/dir1/dir2/dir3 ページが要求された場合、CherryPyはそれをdir1_dir2.dir3()に変換します。よって、これはDir1_dir2という名前のCherryClass内にdir3があると期待します。しかしそのようなメソッドが存在しない場合、Dir1_dir2_dir3という名前のCherryClass内のindexメソッドを探します(これはhttp://localhost:8000/dir1/dir2/dir3/index に一致するということでもあります)。
次の章では、ウェブサイト内に似たようなモジュールがある時、継承をつかう方法をみていきましょう。。。
Debian User
2003-10-13