2013-03-23 2 views
0

Это я делаю, чтобы отправлять почту после обновления записи в базе данных. Я определил приемники в отдельном файле, называемом listeners.py, для приема сигналов.Использование концепции сигналов для создания событий

signals.py

import django.dispatch 

send_email_to = django.dispatch.Signal() 

listeners.py

@receiver(send_mail_to) 
def send_update(sender, instance, created, **kwargs): 
    if instance.author_name: 
     message = "Book details has been updated" 
     subject = "Book updates" 
     send_mail(subject, message, settings.DEFAULT_FROM_EMAIL,[instance.email,]) 

post_save.connect(send_update, sender=Book) 

views.py

def addbook(request):  

    form = BookForm 

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

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

Я получаю сообщение об ошибке, как ahown ниже.

NameError at /addbook/ 
global name 'send_update' is not defined 
Request Method: POST 
Request URL: http://localhost:8000/addbook/ 
Django Version: 1.4.3 
Exception Type: NameError 
Exception Value:  
global name 'send_update' is not defined 
Exception Location: /root/Samples/DemoApp/DemoApp/views.py in addbook, line 50 
Python Executable: /usr/bin/python 
Python Version: 2.7.0 
Python Path:  
['/root/Samples/DemoApp', 
'/usr/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', 
'/usr/lib/python27.zip', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7/site-packages', 
'/usr/lib/python2.7/site-packages/PIL', 
'/usr/lib/python2.7/site-packages/gst-0.10', 
'/usr/lib/python2.7/site-packages/gtk-2.0', 
'/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info', 
'/usr/lib/python2.7/site-packages/webkit-1.0'] 
Server time: Sat, 23 Mar 2013 19:05:01 +0500 

Может ли кто-нибудь увидеть, в чем проблема.

Благодаря

+0

Могу ли я знать, что будет проблемой – user2086641

ответ

0

Поскольку вы определили send_update в своих взглядах, что не имеет никакого значения. Вот почему ошибка говорит, что вам нужно определить send_update.

Но почему вы положили post_save.connect(send_update, sender=Book) в свои мнения? Вы должны удалить это. Это уже понято в вашем listeners.py. Итак, независимо от того, какое действие вы делаете с использованием модели Book, эта модель отправит запрос на этот сигнал.

+0

, вы меняете свой ответ, чего вы пытаетесь достичь? Или вы хотите узнать, как использовать сигналы? – catherine

+0

Я хочу узнать больше о сигналах, но в django doc примеры, которые они дали, были мне непонятными – user2086641

+0

Хорошо, но я понимаю, но вернул коды в оригинале, чтобы он работал. У меня есть блог, я размещаю там, как использовать Django, просто базовые коды. Я планирую также сигнализировать, но я еще не опубликовал его. http://catherinetenajeros.blogspot.com/ – catherine

Смежные вопросы