Dans web2py, existe-t-il un moyen d'exécuter un code commun avant d'appeler tous les contrôleurs? Par exemple, je souhaite ajouter du code qui enregistrera les adresses IP clientes dans un journal des demandes d'activation de l'analyse. Je pourrais simplement faire en sorte que la première ligne de tous mes contrôleurs soit quelque chose comme response = RequestBase(request)
mais je suis curieux de savoir si c'est un problème qui a déjà été résolu grâce à d'autres mécanismes.web2py: Comment puis-je exécuter du code avant d'appeler les contrôleurs?
Répondre
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 contrôleur controllers/default.py
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:
Bien sûr, repr(request)
Bien sûr, repr(request)
n'est pas ce que vous voulez, mais vous avez l'idée: à partir de là vous pouvez enregistrer toutes les informations que vous voulez avant que les contrôleurs soient appelés (ils sont juste définis à ce stade). Le serveur gère déjà un journal dans le répertoire racine, en httpserver.log
.
Placez le code dans un fichier de modèle et il sera exécuté avant tous les contrôleurs. Si vous voulez seulement que le code s'exécute pour un contrôleur spécifique, placez-le en haut du contrôleur avant toute fonction.