下記は、このチュートリアルを通して行う変更を理解する助けとなる、 wiki アプリケーションの設計の簡単な概要です。
wiki テキストの中で reStructuredText マークアップを使用することを 選択します。 reStructuredText から HTML への変換は、広く用いられている docutils Python モジュールによって提供されます。このモジュールを プロジェクトの setup.py ファイルの依存リストに加えます。
wiki データを保持するために SQLite データベースを使用します。また、 このデータベース中のデータにアクセスするために SQLAlchemy を使用します。
データベース内では、 pages という名前の単一のテーブルを定義します。 その要素は wiki ページを格納します。このテーブルには 2 つのカラムあります: name と data です。
/PageName のような URL は、テーブル内で対応する名前を持っている要素 を見つけようとします。
wiki にページを追加するために、新しいレコードが作成され、テキストが data に 格納されます。
ストレージが初期化される時にテキスト This is the front page を含む FrontPage という名前のページが作られ、 wiki ホームページとして使用 されます。
ページの追加、編集、表示という通常動作を扱う3つのビューに加えて wiki フロントページのためのビューがあるでしょう。2つのテンプレートが使用 されるでしょう。一つは wiki ページの表示のため、もう一つは追加と編集の 両方のためです。
Pyramid におけるデフォルトのテンプレートシステムは Chameleon と Mako です。 Chameleon は ZPT の 変種で、 XML ベースのテンプレート言語です。 Mako は非 XML ベースの テンプレート言語です。1つを選ばなければならなかったので、この チュートリアルでは Chameleon を選びました。
私たちは、最終的にアプリケーションにセキュリティを加えます。 このために使用するコンポーネントは下にあります。
ACLは ルート resource に取り付けられています。 下記の列のそれぞれは ACE を詳述します:
アクション | Principal | パーミッション |
---|---|---|
許可 | Everyone | View |
許可 | group:editors | Edit |
2つの追加のビューと1つのテンプレートが、ログインとログアウトのタスク を扱うでしょう。
各ビューに関連した URL、アクション、テンプレートおよびパーミッションが 次のテーブルにリストされます:
URL | アクション | ビュー | テンプレート | パーミッション |
---|---|---|---|---|
/ | /FrontPage に リダイレクト | view_wiki | ||
/PageName | 既存のページを 表示 [2] | view_page [1] | view.pt | view |
/PageName/edit_page | 既存の内容で 編集フォームを 表示。 フォームが送信 されたら /PageName にリダイレクト |
edit_page | edit.pt | edit |
/add_page/PageName | ストレージに PageName を 作成して空の内容で 編集フォームを 表示。 フォームが送信 されたら /PageName にリダイレクト |
add_page | edit.pt | edit |
/login | ログインフォームを 表示。 Forbidden [3] フォームが送信 されたら認証。
|
login | login.pt | |
/logout | /FrontPage に リダイレクト | logout |
[1] | これはビュー名がない場合のページコンテキストに対するデフォルト ビューです。 |
[2] | Pyramid は、ページ PageName がまだ存在しない場合に、 デフォルトの 404 Not Found ページを返すでしょう。 |
[3] | ユーザが認可ポリシーによって許可されないビューを起動しようとした 場合、 pyramid.exceptions.Forbidden に到達します。 |