Журнал аудита
Wagtail предоставляет механизм для протоколирования действий, выполняемых над его объектами. Такие распространенные действия, как создание, обновление, удаление страниц, блокировка и разблокировка, планирование ревизий и изменение конфиденциальности, автоматически регистрируются на уровне модели.
Админ-панель Wagtail использует записи журнала действий для предоставления общесистемной и страниц-специфической истории изменений. Она использует реестр «действий», которые предоставляют дополнительный контекст для залогированного действия.
Журнал аудита, используемый для истории страниц, заменяет страницу списка ревизий, но предоставляет фильтр для записей, специфичных для ревизии.
Примечание
Журнал аудита не заменяет ревизии.
Функцию wagtail.log_actions.log можно использовать для добавления протоколирования в собственный код.
Примечание
При добавлении протоколирования необходимо залогировать действие или действия, произошедшие с объектом. Например, если пользователь создает и публикует страницу, должна быть запись «создание» и запись «публикация». Или, если пользователь копирует опубликованную страницу и выбирает сохранить ее опубликованной, должна быть запись «копирование» и запись «публикация» для новой страницы.
# mypackage/views.py
from wagtail.log_actions import log
def copy_for_translation(page):
# ...
page.copy(log_action='mypackage.copy_for_translation')
def my_method(request, page):
# ..
# Manually log an action
data = {
'make': {'it': 'so'}
}
log(
instance=page, action='mypackage.custom_action', data=data
)
Изменено в версии 2.15: Была добавлена функция log. Ранее протоколирование было реализовано только для страниц и вызывалось через метод PageLogEntry.objects.log_action.
Действия журнала, предоставляемые Wagtail
Действие | Примечания |
|---|---|
| Объект был создан |
| Объект был изменен (для страниц, сохранен как черновик) |
| Объект был удален. Будет отображаться только в истории сайта для администраторов |
| Страница была опубликована |
| Черновик запланирован на публикацию |
| Черновик опубликован через команду управления |
| Планируемая публикация черновика отменена через «Отменить запланированную публикацию» |
| Страница была снята с публикации |
| Страница снята с публикации через команду управления |
| Страница была заблокирована |
| Страница была разблокирована |
| Ревизия была одобрена для модерации |
| Ревизия была отклонена |
| Страница была переименована |
| Страница была возвращена к предыдущему черновику |
| Страница была скопирована в новое местоположение |
| Страница была скопирована в новый локаль для перевода |
| Страница была перемещена в новое местоположение |
| Порядок страницы в родительском элементе был изменен |
| Страница была ограничена |
| Ограничения страницы были обновлены |
| Ограничения страницы были удалены |
| Страница была отправлена на модерацию в рабочем процессе |
| Черновик был одобрен на задаче рабочего процесса |
| Черновик был отклонен, и изменения запрошены на задаче рабочего процесса |
| Черновик был повторно отправлен в рабочий процесс |
| Рабочий процесс был отменен |
Контекст журнала
Модуль wagtail.log_actions предоставляет менеджер контекста для упрощения кода, который регистрирует большое количество действий, таких как скрипты импорта:
from wagtail.log_actions import LogContext
with LogContext(user=User.objects.get(username='admin')):
# ...
log(page, 'wagtail.edit')
# ...
log(page, 'wagtail.publish')
Все вызовы log внутри блока будут затем приписаны указанному пользователю и назначены общему UUID. Контекст журнала автоматически создается для представлений в админ-панели Wagtail.
Модели журнала
Журналы хранятся в базе данных через модели wagtail.models.PageLogEntry (для действий над экземплярами страницы) и wagtail.models.ModelLogEntry (для действий над другими моделями). Журналы страниц хранятся в собственной модели, чтобы обеспечить возможность фильтрации отчетов в соответствии с разрешениями текущего пользователя, что неэффективно с помощью универсального внешнего ключа.
Если ваши собственные модели имеют сложные требования к отчетности, которые сделают ModelLogEntry непригодными, вы можете настроить их для регистрации в собственной модели журнала; это делается путем наследования абстрактной модели wagtail.models.BaseLogEntry и регистрации этой модели с помощью метода register_model реестра журнала:
from myapp.models import Sprocket, SprocketLogEntry
# here SprocketLogEntry is a subclass of BaseLogEntry
@hooks.register('register_log_actions')
def sprocket_log_model(actions):
actions.register_model(Sprocket, SprocketLogEntry)
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/extending/audit_log.html