Model view controller web2py:在调用控制器之前如何执行代码?

Model view controller web2py:在调用控制器之前如何执行代码?,model-view-controller,controller,modularity,web2py,Model View Controller,Controller,Modularity,Web2py,在web2py中,是否有一种方法可以在调用所有控制器之前执行一段公共代码 例如,我想添加一些代码,将客户端IP记录到请求日志中,以启用分析。我可以简单地将所有控制器的第一行设置为类似于response=RequestBase(request),但我很想知道这是否是一个已经通过其他机制解决的问题。您可以简单地将您的日志代码放在模型定义文件models/db.py中,或者在控制器controllers/default.py中,如下所示: with open("mylog.log", "at") as

在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

中将代码放在模型文件中,它将在任何控制器之前执行。如果只希望为特定控制器执行代码,请将其放在任何函数之前的控制器顶部