2013-03-22 52 views
2

在我的示例中,信號功能是在models.py中創建的。相反,我認爲可以使用自定義信號概念。Django使用自定義信號發送郵件

我的信號功能models.py是

class Book(models.Model): 
    [..........] 

def send_update(sender, instance, created, **kwargs): 
    if instance.author_name: 
     message = "Book is updated" 
     subject = "Updates" 
     send_mail(subject, message, your_email, 
      [instance.email,]) 

post_save.connect(send_update, sender=Book) 

views.py是

if request.POST: 
     form = BookForm(request.POST) 

     if form.is_valid(): 
      cd = form.cleaned_data 
      form.save() 
      return redirect('/index/') 
    return render_to_response('addbook.html',{ 'form':form },context_instance=RequestContext(request)) 

這不是我們如何創建一個使用signals.py文件發送郵件的自定義信號。

我想在實踐中學習這個,一個例子會幫助我做到這一點。

感謝

+0

你的意思是你想定義的,而不是使用'pre_save'自己的信號,? – valtron 2013-03-22 06:37:21

回答

10

signals.py

from django.db.models.signals import post_save 
from app.models import Book 

def send_update(sender, instance, created, **kwargs): 
    if instance.author_name: 
     message = "Book is updated" 
     subject = "Updates" 
     send_mail(subject, message, your_email, 
      [instance.email,]) 

post_save.connect(send_update, sender=Book) 

通過在應用程序的__init__.py文件中導入信號來註冊信號。這將允許從signals.pyimport models

__init__.py

import signals 
+0

導入信號不給模塊命名信號如何? – gamer 2015-07-03 10:40:23

1

定義你的信號和接收器在signals.py

from django.dispatch import Signal 

post_update = Signal(providing_args = ['instance']) 

def send_update(...): 
    .... 

post_update.connect(send_update, sender = Book) 

views.py,送你保存表單之後的信號:

instance = form.save() 
post_update.send(sender = Book, instance = instance) 
+0

而不是使用models.py來定義和連接信號,我們可以使用單獨的signals.py文件來做到這一點。如果是這樣,請指導我如何去做 – user2086641 2013-03-22 06:47:33

+0

您可以將該代碼放在'signals.py'中,它可以工作。但是,我建議'''''''''''''''''''連接'信號,因爲接收應該被定義並連接在同一個文件中。 – valtron 2013-03-22 06:51:06

+0

我應該在哪裏定義send_update方法,我已經在models.py中提到 – user2086641 2013-03-22 06:56:13

相關問題