接收重复信号。如何寻找原因?

时间:2014-06-10 11:41:13

标签: django django-signals

我在我项目的__init__.py中写了一个Django信号。看起来像这样:

from django.db.models.signals import post_save
from paypal.standard.ipn.models import PayPalIPN

def confirm_paypal_payment(sender, **kwargs): 
    obj = kwargs['instance']
    ...
    ...

post_save.connect(confirm_paypal_payment, sender=PayPalIPN, dispatch_uid="confirm_paypal_payment")

此信号等待此模型中的保存https://github.com/spookylukey/django-paypal/blob/master/paypal/standard/ipn/models.py

我卡住了,无法理解为什么我会继续收到重复的信号,我已经阅读了文档,并且说我应该使用dispatch_uid来阻止这种情况。但即使使用dispatch_uid,我仍然会收到重复的信号。

有关如何找到根本原因的任何想法?我使用的是Django 1.6.2。

1 个答案:

答案 0 :(得分:1)

将其移出__init__.py并将其保存为signals.py(您的应用目录中的新文件,与views.py相同的位置)或models.py },建议在documentation

  

您可以将信号处理和注册码放在任何您喜欢的地方。   但是,您需要确保它所在的模块得到   早期导入,以便之前注册信号处理   需要发送任何信号。这使您的应用models.py变得更好   放置信号处理程序的地方。

__init__.py是放置这样的代码的一个非常糟糕的地方,因为很有可能它会被执行多次。