Web2py: Como posso executar o código antes de ligar para os controladores?
-
20-09-2019 - |
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.
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.