Pregunta

En web2py, ¿hay una manera de tener un pedazo de código común ser ejecutado antes de que todos los controladores se llaman?

Por ejemplo, quiero añadir algo de código que ingrese direcciones IP del cliente a un registro de solicitudes para permitir el análisis. Simplemente podría hacer la primera línea de todos mis controladores de ser algo así como response = RequestBase(request) pero tengo curiosidad por saber si esto es un problema que ya se ha resuelto a través de algunos otros mecanismos.

¿Fue útil?

Solución

Se podría simplemente poner el pedazo de código de registro en el archivo de definición del modelo, models/db.py, o en su controllers/default.py controlador de la 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 que definirse:

# --------------------------
# 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 cómo lo quieres, pero se entiende la idea:. Desde allí se puede registrar cualquier información que desee antes de que los controladores se llaman (que sólo se definen en esta etapa)

El servidor ya mantiene un registro en el directorio raíz, en httpserver.log.

Otros consejos

Coloque el código en un archivo de modelo y va a ejecutarse antes de que los controladores. Si sólo desea que el código a ejecutar para un controlador específico, lo coloca en la parte superior del controlador antes de cualquier función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top