model view controller - web2py: ¿Cómo puedo ejecutar código antes de llamar a los controladores?
model-view-controller modularity (2)
Simplemente podría poner su fragmento de código de registro en el archivo de definición del modelo, models/db.py
, o en sus controllers/default.py
siguiente manera:
with open("mylog.log", "at") as f:
f.write(repr(request))
def index():
# index controller definition
# ... rest of the code
o, si necesita funciones o clases para definir:
# --------------------------
# 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
Por supuesto, repr(request)
no es como usted lo quiere, pero se entiende la idea: desde allí puede registrar cualquier información que desee antes de que se llame a los controladores (se los acaba de definir en esta etapa).
El servidor ya mantiene un registro en el directorio raíz, en httpserver.log
.
En web2py, ¿hay alguna forma de ejecutar un código común antes de llamar a todos los controladores?
Por ejemplo, deseo agregar algún código que registre las IP de los clientes en un registro de solicitudes para habilitar el análisis. Simplemente podría hacer que la primera línea de todos mis controladores sea algo así como response = RequestBase(request)
pero tengo curiosidad por saber si este es un problema que ya ha sido resuelto a través de otros mecanismos.
Coloque el código en un archivo de modelo y se ejecutará antes que cualquier controlador. Si solo desea que el código se ejecute para un controlador específico, colóquelo en la parte superior del controlador antes de realizar cualquier función.