Question

Dans web2py, est-il un moyen d'avoir un morceau de code commun soit exécuté avant que tous les contrôleurs sont appelés?

Par exemple, je veux ajouter un code qui se connectera IP du client à un journal des demandes pour permettre une analyse. Je pourrais simplement faire la première ligne de tous mes contrôleurs être quelque chose comme response = RequestBase(request) mais je suis curieux de savoir si cela est un problème qui a déjà été résolu par d'autres mécanismes.

Était-ce utile?

La solution

Vous pouvez simplement mettre votre morceau de code d'enregistrement dans le fichier de définition du modèle, models/db.py, ou dans votre controllers/default.py contrôleur comme ceci:

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

def index():
    # index controller definition

# ... rest of the code

ou, si vous avez besoin des fonctions ou des classes à définir:

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

Bien sûr, repr(request) est pas comment vous le voulez, mais vous voyez l'idée. De là, vous pouvez vous connecter les informations que vous voulez avant que les contrôleurs sont appelés (ils sont juste définis à ce stade)

Le serveur maintient déjà un journal dans le répertoire racine, en httpserver.log.

Autres conseils

Placez le code dans un fichier modèle et il se sont exécutés avant que les contrôleurs. Si vous ne souhaitez que le code à exécuter pour un contrôleur spécifique, placez-le en haut du contrôleur avant toutes les fonctions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top