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