在 Django 中,在单独的信号中生成动作是什么意思?
例如,此文档是否在此处:https ://github.com/brantyoung/django-notifications
它指出:生成通知可能最好在单独的信号中完成。
在 Django 中,在单独的信号中生成动作是什么意思?
例如,此文档是否在此处:https ://github.com/brantyoung/django-notifications
它指出:生成通知可能最好在单独的信号中完成。
Django 有一个signalling system
允许您轻松附加将在某个事件发生时触发的函数(信号处理程序)。有许多默认事件,例如保存或删除模型对象时,但您也可以创建自己的事件,以便以后附加代码:
https://docs.djangoproject.com/en/dev/topics/signals/
Django 包含一个“信号调度器”,当框架中的其他地方发生动作时,它可以帮助解耦的应用程序得到通知。简而言之,信号允许某些发送者通知一组接收者某些动作已经发生。当许多代码段可能对相同的事件感兴趣时,它们特别有用。
需要注意的非常重要的一点signals
是,很容易认为这些操作是在请求/响应循环之外异步触发的,但事实并非如此。它们只是一种向事件添加操作的直观方式(即,当 X 被保存时,执行 Y)。
在您提到的文档中,该示例使用了两个信号。第一个是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 信号处理程序的一部分发送。