在 web2py 中,有没有办法在调用所有控制器之前执行一段通用代码?
例如,我想添加一些代码,将客户端 IP 记录到请求日志中以启用分析。我可以简单地使我所有控制器的第一行类似于response = RequestBase(request)
但我很想知道这是否是已经通过其他一些机制解决的问题。
在 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
.
将代码放在模型文件中,它将在任何控制器之前执行。如果您只想为特定控制器执行代码,请将其放在控制器顶部,然后再执行任何功能。