Frage

In web2py, ist es eine Möglichkeit, ein Stück gemeinsamen Code haben, ausgeführt werden, bevor alle Controller aufgerufen werden?

Zum Beispiel möchte ich einige Codes hinzuzufügen, die Client-IP-Adressen in ein Protokoll von Anfragen protokollieren, die Analyse zu ermöglichen. Ich konnte einfach die erste Zeile aller meiner Controller machen so etwas wie response = RequestBase(request) sein, aber ich bin neugierig, ob dies ein Problem ist, das bereits durch einige andere Mechanismen gelöst.

War es hilfreich?

Lösung

Sie können einfach Ihr Stück Logging-Code in der Modelldefinitionsdatei, models/db.py setzen, oder in Ihrem Controller controllers/default.py wie folgt aus:

with open("mylog.log", "at") as f:
    f.write(repr(request))

def index():
    # index controller definition

# ... rest of the code

oder, wenn Sie Funktionen oder Klassen müssen definiert werden:

# --------------------------
# 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

Natürlich ist repr(request) nicht, wie Sie es wollen, aber Sie bekommen die Idee. Von dort aus können Sie alle Informationen melden Sie sich wie Sie, bevor die Controller aufgerufen werden (sie sind nur in dieser Phase definiert)

Der Server verwaltet bereits ein Protokoll im Stammverzeichnis, in httpserver.log.

Andere Tipps

Setzen Sie den Code in einer Modell-Datei und es wird vor allen Controllern ausgeführt werden sollen. Wenn Sie nur der Code auszuführen, für einen bestimmten Controller, Ort, um es an der Oberseite des Controllers vor allen Funktionen mögen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top