如果在数据库中添加新博客,则向所有订阅者发送邮件,通知Django中的当前博客



注意:只添加新的博客管理面板。型号.py

class blog(models.Model):
author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
blog_id = models.AutoField(primary_key=True)
blog_title=models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
slug = models.CharField(max_length=500, blank=True)
tags = TaggableManager()
blog_category_name=models.ForeignKey(blog_category,on_delete=models.CASCADE,null=True,blank=True)
blog_sub_category_name=models.ForeignKey(blog_sub_category,on_delete=models.CASCADE,null=True,blank=True)
written_by = models.CharField(max_length=200, default='Prymus Brandcom')
image_banner= models.ImageField(upload_to='image_banner')
medium_thumbnail = models.ImageField(upload_to='medium_thumbnail')
content = RichTextField() # RichTextField is used for paragraphs
is_authentic=models.BooleanField(default=False)

class Meta: # Plurizing the class name explicitly
verbose_name_plural = 'blog'

def __str__(self): # Dundar Method
return self.blog_title
def save(self, *args, **kwargs): # Saving Modefied Changes
if not self.slug:
self.slug = slugify(self.blog_title)
#super(blog, self).save(*args, **kwargs)
super(blog, self).save(*args, **kwargs)

def snippet(self):
return self.content[:300]

这是我的订户表:

class subscriber(models.Model):
name=models.CharField(max_length=150,default="")
email=models.EmailField(max_length=100)
def __str__(self): # Dundar Method
return self.name

在博客表中添加新博客,而不是向订阅者表中的所有注册用户发送邮件???

您可以使用Django Signals来实现这一点。

(假设您已经在PascalCase上格式化了模型类(

在您的models.py:中

from django.dispatch import receiver
from django.core.mail import send_mass_mail

@receiver(signal=signal=models.signals.pre_save, sender=Blog)
def email_on_blogpost_saved(sender, instance, **kwargs):
# You'll must check if this `blog`` have been ever sent to suscribers   
# because this function will be executed on each save that include modification. 
recipient_mails  = Subscriber.objects.values_list('email', flat=True)
new_mail = ('New post from XXX ', 'FooMessage', 'name@example.com', recipient_mails)
send_mass_mail((new_mail, ), fail_silently=False)

have_been_sent添加一个布尔字段以避免重新发送邮件:

@receiver(signal=signal=models.signals.pre_save, sender=Blog)
def email_on_new_blogpost(sender, instance, **kwargs):
current_blog = sender.objects.get(pk=instance.pk)
if current_blog.have_been_sent:
pass
else:
recipient_mails  = Subscriber.objects.values_list('email', flat=True)
new_mail = ('New post from XXX ', 'FooMessage', 'name@example.com', recipient_mails)
send_mass_mail((new_mail, ), fail_silently=False)

不要忘记通过调整文档中的settings.py来配置Django以进行邮件发送

最新更新