在web2py中,有没有办法在调用所有控制器之前执行一段通用代码?web2py:如何在调用控制器之前执行代码?
例如,我想添加一些代码,将客户端IP记录到请求日志以启用分析。我可以简单地将我的所有控制器的第一行写成response = RequestBase(request)
,但我很想知道这是否已经通过其他一些机制解决了这个问题。
在web2py中,有没有办法在调用所有控制器之前执行一段通用代码?web2py:如何在调用控制器之前执行代码?
例如,我想添加一些代码,将客户端IP记录到请求日志以启用分析。我可以简单地将我的所有控制器的第一行写成response = RequestBase(request)
,但我很想知道这是否已经通过其他一些机制解决了这个问题。
你可以简单地把你的日志代码块模型定义文件,models/db.py
,或在您的控制器controllers/default.py
这样的:
with open("mylog.log", "at") as f:
f.write(repr(request))
def index():
# index controller definition
# ... rest of the code
,或者,如果你需要定义函数或类:
# --------------------------
# Log part:
# --------------------------
def my_log(request):
with open("mylog.log", "at") as f:
f.write(repr(request))
my_log(request)
# --------------------------
# Controllers part:
# --------------------------
def index():
# index controller definition
# ... rest of the code
当然,repr(request)
不是你想要的,但你有这样的想法:从那里你可以在控制器被调用之前记录任何你喜欢的信息(它们只是在这个阶段被定义)。
服务器已经在根目录中维护一个日志,在httpserver.log
。
把代码放在模型文件中,它会在任何控制器之前执行。如果您只希望执行特定控制器的代码,请在执行任何功能之前将其放置在控制器的顶部。