Pyramid + SQLAlchemy + FormAlchemy (4)

(承前)

pyramid_formalchemy のビュー機能

pyramid_formalchemy には管理インターフェイスが附属しているので それを試してみる。

まず必要なパッケージをインストールする。

$ pip install webhelpers
$ pip install couchdbkit

alc/forms.py を作成する。 pyramid_formalchemy のマニュアル には空ファイルで良いとあるが、実際にはそんなことは無かった。 以下の行を記述する。

from formalchemy import FieldSet, Grid

__init__.main() に以下を追加する。

config.include('pyramid_formalchemy')
config.formalchemy_admin('admin', package="alc")

アプリケーションを再起動して http://hogehoge/alc/admin/ にアクセスすると 以下のように表示される。

../../../_images/admin_root.png

例えば Order をクリックすると Order クラスのレコードが表示される。 新規作成や編集もこの画面から可能である。

../../../_images/admin_order.png

構造が単純なデータベースを自分だけで使う場合は これで充分という気がする。

ユーザ認証

Pyramid 標準のユーザ認証システムは極めて単純で、 ビューごとにアクセス可能なユーザグループを指定する。 具体的には view_config デコレータに permission パラメータを与える。 データのレコードごとに permission を変えられるような丁寧な機能は 自分でコードを書かないといけないようだ。

Zope ではコンテンツオブジェクトごとにアクセス権限を設定できたり、 コンテンツオブジェクトのトラバーサル上の親子関係を追跡して アクセス権限を自動的に inherit するような機能があったが、 そういう機能は Pyramid 標準には無いのだろう。 まあ、Pyramid はフルスタックではないし、無い方が正しいように思う。

結論

手持ちのデータを RDB 化して、それの管理 UI が欲しいというだけなら pyramid_formalchemy の admin UI を基本に、多少の検索機能を自作する 程度で間に合いそうだ。

元々のプロダクトは Sphinx で作成しているため、 データを RDB 化した後、Sphinx からそれに接続してデータを抽出・整形するための 拡張を書かなければならない。 それとも、Sphinx には組み込まず、独立のスクリプトをプリプロセッサ的に 動かす方が良いか。

後で考えよう。