在Django中,在单独的信号中生成动作是什么意思?
例如,此文档是否在此处:https://github.com/brantyoung/django-notifications
它指出:生成通知最好在单独的信号中完成。
答案 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信号处理程序的一部分发送。