2015-07-02 14 views
1

我有一個自定義信號功能:Django的傳遞arguements定製信號

def notify_after_registration(sender, **kwargs): 
    email_subject = 'Account confirmation' 
    email_body = "Hey {}, thanks for signing up. To activate your account, click this link within \ 
     48hours http://127.0.0.1:8000/accounts/register_confirm/{}".format(username, activation_key) 

    send_mail(email_subject, email_body, settings.EMAIL_HOST_USER, 
     [email], fail_silently=False) 


post_save.connect(notify_after_registration(sender), sender=User) 

我在這裏產生從我的觀點激活密鑰並將其保存在不同的模式。

現在如何在這裏傳遞這個激活密鑰和用戶名。

謝謝

回答

0

您可以傳遞參數作爲關鍵字參數(kwargs)爲activation_key=...username=...等。接收器將它們置於kwargskwargs['activation_key'],kwargs['username']

參考:Django docs: Signals

編輯:你不明確調用該函數。只要有必要且有意義的關鍵字(畢竟它是一個自定義信號),就會用關鍵字觸發信號,並且框架會調用適當的接收器來適當地傳遞參數。

+0

我應該叫我notify_after_registration在我看來,並通過kwargs? – gamer

+0

已更新的答案。 – Wtower

+0

我有一個模型和視圖和信號。我從視圖生成密鑰。我想在用戶使用激活密鑰註冊時發送電子郵件。當創建用戶時,應該將電子郵件發送給用戶。我的觀點應該被稱爲... – gamer

0

此行是錯誤的:

post_save.connect(notify_after_registration(sender), sender=User) 

你不應該在這裏調用你的接收器功能,當您連接它

你應該做的:

post_save.connect(notify_after_registration, sender=User) 

post_save是一個內置Django信號,因此它將自動與sender arg一起發送。

這一切都在文檔:
https://docs.djangoproject.com/en/1.8/topics/signals/#receiver-functions

+0

我在視圖中生成這個activation_key和username。是否只是我做post_save.connect(notify_after_registration,發件人=用戶,activation_key ='123',用戶名='myuser')或者我應該在視圖中調用此函數?沒有打電話,我怎麼能把這個功能傳遞給參數? – gamer

+0

抱歉我在上面粘貼了錯誤,我會更新。在你連接信號的地方不應該有任何kwargs或呼叫。在你發出信號 – Anentropic

+0

的地方給出了參數,你不能向「post_save」信號傳遞額外的參數......並且在_connect_接收器函數的位置你不會知道激活密鑰和用戶名的值(這應該在導入時發生,而不是在方法內) – Anentropic