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/ にアクセスすると 以下のように表示される。
例えば Order をクリックすると Order クラスのレコードが表示される。 新規作成や編集もこの画面から可能である。
構造が単純なデータベースを自分だけで使う場合は これで充分という気がする。
ユーザ認証¶
Pyramid 標準のユーザ認証システムは極めて単純で、 ビューごとにアクセス可能なユーザグループを指定する。 具体的には view_config デコレータに permission パラメータを与える。 データのレコードごとに permission を変えられるような丁寧な機能は 自分でコードを書かないといけないようだ。
Zope ではコンテンツオブジェクトごとにアクセス権限を設定できたり、 コンテンツオブジェクトのトラバーサル上の親子関係を追跡して アクセス権限を自動的に inherit するような機能があったが、 そういう機能は Pyramid 標準には無いのだろう。 まあ、Pyramid はフルスタックではないし、無い方が正しいように思う。
結論¶
手持ちのデータを RDB 化して、それの管理 UI が欲しいというだけなら pyramid_formalchemy の admin UI を基本に、多少の検索機能を自作する 程度で間に合いそうだ。
元々のプロダクトは Sphinx で作成しているため、 データを RDB 化した後、Sphinx からそれに接続してデータを抽出・整形するための 拡張を書かなければならない。 それとも、Sphinx には組み込まず、独立のスクリプトをプリプロセッサ的に 動かす方が良いか。
後で考えよう。