2009-11-16 2 views
3

В web2py существует ли способ выполнения куска общего кода перед вызовом всех контроллеров?web2py: Как я могу выполнить код перед вызовом контроллеров?

Например, я хочу добавить код, который будет записывать IP-адреса клиентов в журнал запросов для включения анализа. Я мог бы просто сделать первую строку всех моих контроллеров чем-то вроде response = RequestBase(request), но мне любопытно узнать, является ли это проблемой, которая уже решена с помощью некоторых других механизмов.

ответ

3

Вы можете просто положить кусок протоколирования кода в файле определения модели, models/db.py, или в контроллере controllers/default.py так:

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

def index(): 
    # index controller definition 

# ... rest of the code 

или, если вам нужны функции или классы должны быть определены:

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

Конечно, repr(request) не так, как вы этого хотите, но вы получаете идею: оттуда вы можете записывать любую информацию, которая вам нравится, до того, как вызываются контроллеры (они просто определены на этом этапе).

Сервер уже ведет журнал в корневом каталоге, в httpserver.log.

3

Поместите код в файл модели, и он будет запущен перед любыми контроллерами. Если вы хотите, чтобы код выполнялся для конкретного контроллера, поместите его в верхнюю часть контроллера перед любыми функциями.

 Смежные вопросы

  • Нет связанных вопросов^_^