web2pyは:どのように私は、コントローラを呼び出す前にコードを実行することができますか?
-
20-09-2019 - |
質問
の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
で、ルートディレクトリにログを保持します。
他のヒント
モデルファイル内のコードを配置し、それがどのコントローラの前に実行されます。あなたが唯一のコードは、特定のコントローラのために実行したい場合は、任意の関数の前に、コントローラの一番上に置きます。
所属していません StackOverflow