Django 用信号概念做事件
这就是我在数据库中更新记录后发送邮件所做的。我在名为listeners.py的单独文件中定义了接收器以接收信号 signals.pyDjango 用信号概念做事件,django,django-models,django-views,django-signals,Django,Django Models,Django Views,Django Signals,这就是我在数据库中更新记录后发送邮件所做的。我在名为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_nam
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))
我收到一条错误消息,如下所示
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
有人能看出问题出在哪里吗
谢谢,因为您在视图中定义了没有价值的
send\u update
。这就是为什么错误提示您需要定义send\u更新
但是为什么要在视图中放置
post\u save.connect(send\u update,sender=Book)
?你必须把它去掉。它已经在你的listeners.py中被理解了。因此,无论您使用Book model执行何种操作,该模型都会向该信号发送请求。我是否可以知道,如果您修改我的答案,会出现什么问题,您试图实现什么目标?或者你想学习如何使用信号?我想学习更多关于信号的知识,但在django doc中,他们给出的示例对我来说是不可理解的,我理解,但我支持原始代码,以便它能够工作。我有一个博客,我在那里发布了关于如何使用Django的文章,只是一个基本的代码。我也计划发布这个信号,但我还没有发布。凯瑟琳,你能检查一下这个问题吗