我正在寻找一种在我的网站上记录用户活动的方法。 我有一个标准的TG2快速入门项目。 我的模型中的“User”类还有其他列:
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 :(得分: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')
...
有没有办法将它用于整个控制器?喜欢用 控制器的“allow_only”代替每个方法的“@require”。
答案 1 :(得分:0)
要在控制器的每个方法之前和之后执行某些操作,您可以在控制器类中定义_before
和_after
方法。
如果您需要在应用程序中的每个方法之前和之后执行它们,您可以在base_config.register_hook('before_render' function)
内调用app_cfg.py
来注册应用程序范围。