Сигналы
Wagtail’s Revision и Страница реализуют Сигналы из django.dispatch. Сигналы полезны для создания побочных эффектов от событий публикации/снятия страницы с публикации.
Например, вы можете использовать сигналы для отправки уведомлений о публикации в службу обмена сообщениями или POST сообщения в другой приложение, использующее API, такой как генератор статических сайтов.
page_published
Этот сигнал испускается из Revision, когда ревизия страницы устанавливается в published.
-
sender- Страницаclass. -
instance- Конкретный экземплярPage. -
revision- Страница, которая была опубликована. -
kwargs- Любые другие аргументы, переданныеpage_published.send().
Чтобы прослушать сигнал, реализуйте page_published.connect(receiver, sender, **kwargs). Вот простой пример того, как вы можете уведомить свою команду о публикации:
from wagtail.signals import page_published
import requests
# Let everyone know when a new page is published
def send_to_slack(sender, **kwargs):
instance = kwargs['instance']
url = 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
values = {
"text" : "%s was published by %s " % (instance.title, instance.owner.username),
"channel": "#publish-notifications",
"username": "the squid of content",
"icon_emoji": ":octopus:"
}
response = requests.post(url, values)
# Register a receiver
page_published.connect(send_to_slack)
Получение конкретных событий модели
Иногда вы не заинтересованы в получении сигналов для каждой модели, или вы хотите обрабатывать сигналы для конкретных моделей по-разному. Например, вы можете захотеть сделать что-то, когда публикуется новая запись блога:
from wagtail.signals import page_published
from mysite.models import BlogPostPage
# Do something clever for each model type
def receiver(sender, **kwargs):
# Do something with blog posts
pass
# Register listeners for each page model class
page_published.connect(receiver, sender=BlogPostPage)
Wagtail предоставляет доступ к списку зарегистрированных типов страниц через функцию get_page_models() в wagtail.models.
Прочитайте документацию Django для получения дополнительной информации о указании отправителей.
page_unpublished
Этот сигнал испускается из Page при снятии страницы с публикации.
-
sender- Страницаclass. -
instance- Конкретный экземплярPage. -
kwargs- Любые другие аргументы, переданныеpage_unpublished.send()
pre_page_move и post_page_move
Эти сигналы испускаются из Page непосредственно перед и после перемещения.
Подпишитесь на pre_page_move, если вам необходимо знать значения ДО применения каких-либо изменений в базе данных. Например: Получение предыдущего URL страницы или URL ее потомков.
Подпишитесь на post_page_move, если вам нужно знать значения ПОСЛЕ применения изменений в базе данных. Например: Получение нового URL страницы или URL ее потомков.
Следующие аргументы испускаются для обоих сигналов:
-
sender- Страницаclass. -
instance- Конкретный экземплярPage. -
parent_page_before- Родительская страницаinstance**до** перемещения. -
parent_page_after- Родительская страницаinstance**после** перемещения. -
url_path_before- Значениеinstance.url_path**до** перемещения. -
url_path_after- Значениеinstance.url_path**после** перемещения. -
kwargs- Любые другие аргументы, переданныеpre_page_move.send()илиpost_page_move.send().
Различение перемещения и переупорядочения
Сигнал может испускаться в результате перемещения страницы в другой раздел («перемещение») или в результате перемещения страницы в другое положение в том же разделе («переупорядочение»). Знание разницы между этими двумя операциями особенно полезно, так как только «перемещение» влияет на URL страницы (и ее потомков), а «переупорядочение» только влияет на естественный порядок страниц, что, вероятно, менее значимо.
Лучший способ отличить «перемещение» от «переупорядочения» — сравнить значения url_path_before и url_path_after. Например:
from wagtail.signals import pre_page_move
from wagtail.contrib.frontend_cache.utils import purge_page_from_cache
# Clear a page's old URLs from the cache when it moves to a different section
def clear_page_url_from_cache_on_move(sender, **kwargs):
if kwargs['url_path_before'] == kwargs['url_path_after']:
# No URLs are changing :) nothing to do here!
return
# The page is moving to a new section (possibly even a new site)
# so clear old URL(s) from the cache
purge_page_from_cache(kwargs['instance'])
# Register a receiver
pre_page_move.connect(clear_old_page_urls_from_cache)
page_slug_changed
Этот сигнал испускается из Page при публикации изменения его псевдонима.
Следующие аргументы испускаются этим сигналом:
-
sender- Страницаclass. -
instance- Обновленный (и сохраненный) экземплярPage. -
instance_before- Копия экземпляраPage**до** сохранения изменений.
workflow_submitted
Этот сигнал испускается из WorkflowState при отправке страницы в рабочий процесс.
-
sender-WorkflowState -
instance- Конкретный экземплярWorkflowState. -
user- Пользователь, который отправил рабочий процесс. -
kwargs- Любые другие аргументы, переданныеworkflow_submitted.send()
workflow_rejected
Этот сигнал испускается из WorkflowState при отклонении страницы от рабочего процесса.
-
sender-WorkflowState -
instance- Конкретный экземплярWorkflowState. -
user- Пользователь, который отклонил рабочий процесс. -
kwargs- Любые другие аргументы, переданныеworkflow_rejected.send()
workflow_approved
Этот сигнал испускается из WorkflowState при успешном завершении рабочего процесса страницы.
-
sender-WorkflowState -
instance- Конкретный экземплярWorkflowState. -
user- Пользователь, который последний одобрил рабочий процесс. -
kwargs- Любые другие аргументы, переданныеworkflow_approved.send()
workflow_cancelled
Этот сигнал испускается из WorkflowState при отмене рабочего процесса страницы.
-
sender-WorkflowState -
instance- Конкретный экземплярWorkflowState. -
user- Пользователь, который отменил рабочий процесс. -
kwargs- Любые другие аргументы, переданныеworkflow_cancelled.send()
task_submitted
Этот сигнал испускается из TaskState при отправке страницы на выполнение задачи.
-
sender-TaskState -
instance- Конкретный экземплярTaskState. -
user- Пользователь, который отправил страницу на выполнение задачи. -
kwargs- Любые другие аргументы, переданныеtask_submitted.send()
task_rejected
Этот сигнал испускается из TaskState при отклонении страницы от выполнения задачи.
-
sender-TaskState -
instance- Конкретный экземплярTaskState. -
user- Пользователь, который отклонил задачу. -
kwargs- Любые другие аргументы, переданныеtask_rejected.send()
task_approved
Этот сигнал испускается из TaskState при утверждении задачи страницы.
-
sender-TaskState -
instance- Конкретный экземплярTaskState. -
user- Пользователь, который утвердил задачу. -
kwargs- Любые другие аргументы, переданныеtask_approved.send()
task_cancelled
Этот сигнал испускается из TaskState при отмене задачи страницы.
-
sender-TaskState -
instance- Конкретный экземплярTaskState. -
user- Пользователь, который отменил задачу. -
kwargs- Любые другие аргументы, переданныеtask_cancelled.send()
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/reference/signals.html