2012-03-02 9 views
0

私は自分のサイトでユーザー活動を記録する方法を探しています。 私は、スタンダードのTG2クイックスタートプロジェクトを持っています。すべてのページ要求を呼び出す機能

class User(DeclarativeBase): 
... 
    last_activity = Column(DateTime) 
... 

を...と私は機能があります:私のモデルで 「ユーザー」クラスは、追加の列を持っている私は、この機能を配置する場所を知らない

def update_activity(): 
    if 'REMOTE_USER' in request.environ: 
     auser = DBSession.query(User).filter(User.user_name==request.environ['REMOTE_USER']).one() 
     auser.last_activity = datetime.now() 

を。自分のサーバーの任意のページが訪問されるたびに呼び出される必要があります。 RootControllerの内部では一度だけ実行されます。

答えて

0

コントローラーのすべてのメソッドの前後にいくつかのアクションを実行するには、コントローラクラス内で_before_afterのメソッドを定義できます。

アプリケーション内のすべてのメソッドの前後にそれらを実行する必要がある場合は、app_cfg.py内にbase_config.register_hook('before_render' function)を呼び出してアプリケーションのワイドフックを登録できます。

0

私はデコレータを使って見つけた解決策です。

... 
from tg.decorators import before_call 
... 
def updateactivity(*l, **kw): 
    now = datetime.now() 
    DBSession.query(User).filter(User.user_name==request.environ['REMOTE_USER']).one().last_activity = datetime(now.year, now.month, now.day, now.hour, now.minute, now.second) 
... 
class RootController(BaseController): 
... 
    @expose('myproject.templates.mytemplate') 
    @require(predicates.not_anonymous) 
    @before_call(updateactivity) 
    def mymethod(self, **kw): 
... 
     return dict(page='mypage') 
... 

コントローラー全体に使用する方法はありますか?各メソッドの "@require"の代わりに "allow_only"をコントローラに使用するようにします。

関連する問題