web2py: Come posso eseguire codice prima di chiamare i controllori?
-
20-09-2019 - |
Domanda
In web2py, c'è un modo per avere un pezzo di codice comune essere eseguito prima di tutti i controllori sono chiamati?
Per esempio, voglio aggiungere un codice che registrerà IP client a un registro di richieste per consentire l'analisi. Potrei semplicemente fare la prima linea di tutti i miei controllori essere qualcosa di simile response = RequestBase(request)
ma io sono curioso di sapere se questo è un problema che è già stato risolto attraverso alcuni altri meccanismi.
Soluzione
Si potrebbe semplicemente mettere il vostro pezzo di codice di registrazione nel file di definizione del modello, models/db.py
, o nella vostra controllers/default.py
controllore in questo modo:
with open("mylog.log", "at") as f:
f.write(repr(request))
def index():
# index controller definition
# ... rest of the code
o, se avete bisogno di funzioni o classi da definire:
# --------------------------
# 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
Naturalmente, repr(request)
non è come si vuole, ma si ottiene l'idea:. Da lì è possibile accedere tutte le informazioni che ti piace prima che i controllori sono chiamati (sono appena definiti in questa fase)
Il server mantiene già un registro nella directory principale, in httpserver.log
.
Altri suggerimenti
Inserire il codice in un file di modello e otterrà eseguito prima di qualsiasi controller. Se si desidera solo il codice da eseguire per un controller specifico, posizionarlo in cima il controller prima di qualsiasi funzione.