首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用signals概念做事件

使用signals概念做事件
EN

Stack Overflow用户
提问于 2013-03-23 22:05:53
回答 1查看 688关注 0票数 0

这是我在数据库中更新记录后发送邮件的方式,我在单独的文件listeners.py中定义了接收者来接收信号。

signals.py

代码语言:javascript
复制
import django.dispatch

send_email_to = django.dispatch.Signal()

listeners.py

代码语言:javascript
复制
@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

代码语言:javascript
复制
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))

我收到一个错误信息,如下所示。

代码语言:javascript
复制
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

有人能看出问题出在哪里吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-24 22:33:22

因为您在视图中定义了没有值的send_update。这就是为什么错误提示您需要定义send_update的原因。

但是为什么要把post_save.connect(send_update, sender=Book)放在视图中呢?您必须将其删除。它已经在你的listeners.py中被理解。因此,无论您使用Book模型执行什么操作,该模型都会向该信号发送一个请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15587680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档