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