2011-06-30 98 views
1

我試圖創建一個自定義信號,當字段auth_user.is_active變爲1時。我查看了Django關於信號的文檔,但無法理解如何實現自定義信號。爲用戶激活其帳戶創建自定義信號

當用戶帳戶被激活,我想執行以下功能:

def new_user(sender, **kwargs) 
    profile = User.objects.get(id=user_id).get_profile() 
    return RecentActivity(content_object=profile, event_type=1, timestamp=datetime.datetime.now()) 

我將如何做到這一點。而且,直接使用數據庫插入來使用信號的優點是什麼?謝謝。

回答

1

如果你想在領域發生變化時做些什麼,你可以使用here(Josh的回答)。

信號通常用於在應用程序之間進行通信。例如auth應用程序發送user_logged_in信號。所以如果你想在用戶登錄時做一些事情,你只需處理這個信號,不需要修補應用程序。

+0

如果我只是想在第一用戶日誌發送的信號? – David542

+1

@ David542你應該在某處存儲一個像'signal_sent'這樣的標誌。順便說一下,在你的應用程序中,用戶可能會再次失去活性?如果沒有 - 這是國旗。 – DrTyrsa

1

這裏是我做過什麼:

# in models.py 
@receiver(pre_save, sender=User, dispatch_uid='get_active_user_once') 
def new_user_activation_handler(sender, instance, **kwargs): 
    if instance.is_active and User.objects.filter(pk=instance.pk, is_active=False).exists(): 
     profile = User.objects.get(pk=instance.pk).get_profile() 
     RecentActivity.objects.create(content_object=profile, event_type=1, timestamp=datetime.datetime.now()) 
+0

你點擊了我提供的鏈接嗎?無需額外的數據庫查詢即可完成。 – DrTyrsa

+0

@DrTyrsa - auth應用程序鏈接?我不太確定如何在沒有額外的數據庫查詢的情況下做到這一點。您能否詳細說明您的意思(代碼示例會很棒)。謝謝。 – David542