2009-11-16 52 views
3

在web2py中,有沒有辦法在調用所有控制器之前執行一段通用代碼?web2py:如何在調用控制器之前執行代碼?

例如,我想添加一些代碼,將客戶端IP記錄到請求日誌以啓用分析。我可以簡單地將我的所有控制器的第一行寫成response = RequestBase(request),但我很想知道這是否已經通過其他一些機制解決了這個問題。

回答

3

你可以簡單地把你的日誌代碼塊模型定義文件,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

3

把代碼放在模型文件中,它會在任何控制器之前執行。如果您只希望執行特定控制器的代碼,請在執行任何功能之前將其放置在控制器的頂部。

相關問題