веб2пи:Как я могу выполнить код перед вызовом контроллеров?

StackOverflow https://stackoverflow.com/questions/1739737

Вопрос

Есть ли в web2py способ выполнить часть общего кода до вызова всех контроллеров?

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

Это было полезно?

Решение

Вы можете просто поместить свой фрагмент кода регистрации в файл определения модели, 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.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top