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

时间:2012-12-13 17:00:56

标签: django notifications signals

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

  

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

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

答案 1 :(得分: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信号处理程序的一部分发送。