web2pyは:どのように私は、コントローラを呼び出す前にコードを実行することができますか?

StackOverflow https://stackoverflow.com/questions/1739737

質問

の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で、ルートディレクトリにログを保持します。

他のヒント

モデルファイル内のコードを配置し、それがどのコントローラの前に実行されます。あなたが唯一のコードは、特定のコントローラのために実行したい場合は、任意の関数の前に、コントローラの一番上に置きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top