0

在 Django 中,在单独的信号中生成动作是什么意思?

例如,此文档是否在此处:https ://github.com/brantyoung/django-notifications

它指出:生成通知可能最好在单独的信号中完成。

4

2 回答 2

1

Django 有一个signalling system允许您轻松附加将在某个事件发生时触发的函数(信号处理程序)。有许多默认事件,例如保存或删除模型对象时,但您也可以创建自己的事件,以便以后附加代码:

https://docs.djangoproject.com/en/dev/topics/signals/

Django 包含一个“信号调度器”,当框架中的其他地方发生动作时,它可以帮助解耦的应用程序得到通知。简而言之,信号允许某些发送者通知一组接收者某些动作已经发生。当许多代码段可能对相同的事件感兴趣时,它们特别有用。

需要注意的非常重要的一点signals是,很容易认为这些操作是在请求/响应循环之外异步触发的,但事实并非如此。它们只是一种向事件添加操作的直观方式(即,当 X 被保存时,执行 Y)。

于 2012-12-13T17:13:13.587 回答
1

在您提到的文档中,该示例使用了两个信号。第一个是notifications.notify,另一个是django.db.models.signals.post_save

为了使用通知应用程序,基本上你只需要第一个信号。例如,您可以在代码中的任何位置编写:

notify.send(request.user, verb='reached level 10')

但是,作者建议您应该在处理另一个信号之后(或何时)发出通知信号。因此下面的例子:

def my_handler(sender, instance, created, **kwargs):
    #other routines here
    notify.send(instance, verb='was saved')

post_save.connect(my_handler, sender=MyModel)

也就是说,您将通知信号作为 post_save 信号处理程序的一部分发送。

于 2012-12-13T17:27:30.387 回答