Pergunta

No Web2py, existe uma maneira de ser executada um código comum antes que todos os controladores sejam chamados?

Por exemplo, quero adicionar algum código que registrará o cliente IPS a um log de solicitações para ativar a análise. Eu poderia simplesmente fazer a primeira linha de todos os meus controladores ser algo como response = RequestBase(request) Mas estou curioso para saber se esse é um problema que já foi resolvido através de outros mecanismos.

Foi útil?

Solução

Você pode simplesmente colocar seu código de log no arquivo de definição de modelo, models/db.py, ou em seu controlador controllers/default.py assim:

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

def index():
    # index controller definition

# ... rest of the code

Ou, se você precisar de funções ou classes a serem definidas:

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

É claro, repr(request) Não é como você deseja, mas você tem a ideia: a partir daí, pode registrar qualquer informação que desejar antes que os controladores sejam chamados (eles são definidos nesta fase).

O servidor já mantém um log no diretório raiz, em httpserver.log.

Outras dicas

Coloque o código em um arquivo de modelo e ele será executado antes de qualquer controlador. Se você deseja que o código seja executado apenas para um controlador específico, coloque -o na parte superior do controlador antes de qualquer função.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top