擅长:python、mysql、java
<h3>添加基于类的信号处理程序</h3>
<p>您可以这样做:</p>
<pre><code>class ActionSignals(object):
def __init__(self, *args, **kwargs):
# ...
def __call__(self, *args, **kwargs):
print(self.stuff)
</code></pre>
<p>然后连接信号处理器:</p>
^{pr2}$
<p>这使用了python的“magic”<a href="https://docs.python.org/3.4/reference/datamodel.html#object.__call__" rel="nofollow">^{<cd1>}</a>方法,该方法允许您将类的实例用作函数。在</p>
<h3>避免重复</h3>
<p>注意在代码中添加处理程序的位置,因为可能会创建重复项。例如,如果您要将第二位代码放在模块根目录中,它将在每次导入模块时添加一个处理程序。在</p>
<p>要避免这种情况,可以执行<a href="https://docs.djangoproject.com/en/1.8/topics/signals/#preventing-duplicate-signals" rel="nofollow">following</a>:</p>
<pre><code>post_save.connect(handler, dispatch_uid="my_unique_identifier")
</code></pre>
<p>正如@Alasdair所指出的,您可以在<code>AppConfig.ready()</code>中添加处理程序(这是推荐的执行位置),不过,如果您注意不要创建不希望的重复项,则通常可以在任何位置执行此操作。在</p>
<p>见<a href="https://docs.djangoproject.com/en/1.8/topics/signals/#connecting-receiver-functions" rel="nofollow">"Where should this code live?" in this doc</a>。在</p>