代码之家  ›  专栏  ›  技术社区  ›  srmark

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

  •  3
  • srmark  · 技术社区  · 16 年前

    在web2py中,是否有一种方法可以在调用所有控制器之前执行一段公共代码?

    例如,我想添加一些代码,将客户端IP记录到请求日志中,以启用分析。我可以简单地将我所有控制器的第一行设置为 response = RequestBase(request) 但我很想知道这是否是一个已经通过其他机制解决的问题。

    2 回复  |  直到 14 年前
        1
  •  3
  •   RedGlyph sumit sonawane    16 年前

    您可以简单地将日志代码放入模型定义文件中, 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 .

        2
  •  3
  •   Gladius    16 年前

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