Django регистрирует активность пользователя - PullRequest
0 голосов
/ 06 ноября 2018

Я хотел бы вести журнал в моем приложении для каждого события изменения базы данных. Что-то вроде отметки времени + имя пользователя +, какая модель была изменена, записана в файл журнала (просто укажите, что экземпляр модели был изменен, а не то, что это изменение было). Комбинация сигналов и регистрации выглядит как естественная подгонка.

Так что в сигналах моделей я бы сделал:

import logging
...
logger = logging.getLogger(__name__)
logger.info("Order {} deleted by {}".format(order.barcode, request.user.email))

Проблема в том, что информационный уровень журнала полон запросов POST и GET. Обычная рекомендация - если вы не хотите, чтобы все эти журналы запросов в вашем файле журнала переходили на более высокий уровень, например Предупреждение, но не имеет смысла отмечать эти события как предупреждения здесь. Другой вариант - использовать фильтр, чтобы избавиться от журналов GET / POST, как рекомендовано здесь . Но по умолчанию события журнала предупреждений и уровня ошибок также попадают в информационный журнал, что в данном случае также является нежелательным поведением, поэтому их также необходимо отфильтровать. Этот файл журнала действительно предназначен только для регистрации события «этот пользователь изменил экземпляр модели».

Также в идеале этот файл должен быть доступен (только для чтения) на сайте пользователям на уровне персонала, поэтому я подумывал о том, чтобы поместить этот файл в каталог MEDIA. Если журнал также содержит следы ошибок, это, вероятно, плохая идея.

Это просто похоже на хакерское решение, что я здесь пропускаю?

1 Ответ

0 голосов
/ 06 ноября 2018

Может быть, лучше использовать Django Admin Logs + сигналов . Например:

from django.contrib.admin.models import LogEntry

LogEntry.objects.log_action(
                        user_id = ...,
                        content_type_id = ...,
                        object_id = ...,
                        object_repr = ....,
                        change_message = ...,
                        action_flag = ...
                       )

Вы можете проверить этот SO ответ для более подробной информации. Также вы можете разрешить пользователям набирать контент с сайта администратора о том, какие журналы они могут видеть.

enter image description here

...