Spec-Zone.ru › Wagtail

Сигналы

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API