2011年4月22日金曜日

CRUD

CRUDが高級すぎてなんだか良く分からなかった。
最近、すこしわかってきた。要するにSQLFORMを1functionで済ませようという発想です。
データ一覧のテーブルのTHEADなどは呼ぶときに、messageや戻りアドレスはsettingsです。
その辺りはhttp://www.web2py.com/book/default/chapter/07#CRUDに詳しいのですが、実際に使うと驚くほどに簡単。


一番に理解を超えていたのが

def data(): return dict(form=crud())

とかくと、以下のURLがexposeされるという説明でした。
http://.../[app]/[controller]/data/tables
http://.../[app]/[controller]/data/create/[tablename]
http://.../[app]/[controller]/data/read/[tablename]/[id]
http://.../[app]/[controller]/data/update/[tablename]/[id]
http://.../[app]/[controller]/data/delete/[tablename]/[id]
http://.../[app]/[controller]/data/select/[tablename]
http://.../[app]/[controller]/data/search/[tablename]

これでViewはまったくいじらずに機能が実現します。

djangoにも同じようなのがありますが、結構に面倒くさかった。

そこで自分のアプリにも使ってみた。アドミだけが使うDBのメンテナンスだが、マスタースケジュールを作成、リスト、更新する

def list_schedule():
    db.schedule.id.represent=lambda id:  A('edit:',id,_href=URL('update_schedule',args=(id)))
    return dict(records=crud.select(db.schedule, db.schedule.id>0)) 
このfunctionはscheduleテーブルから全レコードを表示しています。表示されたIDの部分にhrefが隠れていて次の関数update_scheduleを呼びます。
 def update_schedule():
    return dict(form=crud.update(db.schedule, request.args(0),next=URL('list_schedule'))) 
scheduleを更新するフォームを表示して、更新したらlist_scheduleに戻ります。
 def create_schedule():
    form = crud.create(db.schedule, next=URL('create_schedule'),
           message=T("record created"))
    db.schedule.id.represent=lambda id:  A('edit:',id,_href=URL('update_schedule',args=(id)))
    return dict(form=form, records=crud.select(db.schedule, db.schedule.id>0,))
全てのscheduleと新規作成のフォームを表示しています。
ようするにappadminと同じなんですが、柔軟性と開発スピードではappadminとSQLFORMの間にあるということでしょうか。
htmlは何も書かなくて大丈夫です。

0 件のコメント:

コメントを投稿