2016-11-03 126 views
1

坐在它上面的一天。真的無法理解爲什麼這個信號沒有被觸發,當用戶被激活時,沒有錯誤日誌,在管理員激活時沒有異常。任何人都可以幫忙嗎?下面的代碼應該導致apache error.log中的日誌消息,當用戶,對吧?爲什麼信號不會觸發?

import logging 
from django.dispatch import receiver 
from registration.signals import user_activated 

@receiver(user_activated) 
def registered_callback(sender, **kwargs): 
    logger = logging.getLogger("user-activated") 
    logger.error("activated here") 

同樣與user_registered

回答

3

首先使用Django的1.8.3。你應該先註冊信號的所有IM的。據我所知,有一些方法可以做到這一點,但這就是我要做的。 在您的應用程序中創建signals.py在那裏寫信號;

from django.db.models.signals import post_save 
from django.dispatch import receiver 
@receiver(post_save, sender=your_model,dispatch_uid="yourmodel_save_receiver") 
      def post_save_yourmodel(sender, instance, **kwargs): 
       if instance.profile_status: 
        print "active" 
       else: 
        print "not active" 

然後您應該創建apps.py。該文件包含您的模型的配置信息。

from django.apps import AppConfig 
class yourmodel_config(AppConfig): 
    name = 'yourmodel_config' 
    verbose_name = 'your_model config' 

    def ready(self): 
     import yourmodel.signals 

有了這個,只要你的應用程序已經準備好,你的信號將被導入 最後打開__init__.py並添加以下。

default_app_config = 'yourmodel.apps.yourmodel_config' 

有了這個,你要定義你的model.This例如應用程序配置當過yourmodel保存,信號檢查取決於你的控制檯值(true或false)profile_status屬性,並打印輸出。您還可以將created參數添加到您的模型,以瞭解是否創建了該模型的實例。如果創建了新記錄,則created將返回True。 def post_save_yourmodel(sender, instance, created, **kwargs):。否則,只要您的型號以yourmodel.save()保存,就會觸發此信號。 考慮這是一個post_save示例。您可以從here中找到型號信號的列表。

+0

如果我理解正確,你描述瞭如何使新信號正確?不過,我正在使用預定義的一個。如果我沒有做錯什麼,那麼我使用的框架中有一個錯誤(django-registration,或者我爲他們使用的模板)。所以,問題更像是「你看到拼寫錯誤還是你認爲這是一個錯誤?」 – erikbwork

+0

是的,這是你如何實現新的信號。我不認爲你的問題是一個錯誤。你必須像這樣post_save.connect(registered_callback,sender = mymodel)以某種方式簽名你的接收器。也許這就是爲什麼你的接收器沒有捕獲任何信號,但我沒有你的方法的經驗,所以我不太清楚你的問題是什麼。 – Brkyrn

+0

那麼,你會如何解釋[註冊文件](http://django-registration.readthedocs.io/en/2.0.1/signals.html)?我會說他們對已經實施的信號很有信心。只要我不註冊第二個,其中一個甚至可以工作。我不認爲添加接收應該刪除或副作用不觸發另一個。 – erikbwork

相關問題