2012-03-02 3 views
0

내 사이트에서 사용자 활동을 기록하는 방법을 찾고 있습니다. 나는 standartart 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 메소드를 정의 할 수 있습니다.

응용 프로그램의 모든 메서드 전후에 수행해야 할 경우 base_config.register_hook('before_render' function) 안에 app_cfg.py을 호출하여 응용 프로그램의 다양한 후크를 등록 할 수 있습니다.

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"를 사용하십시오.

관련 문제