Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # models.py
- class Post(models.Model):
- title = models.CharField(_('title'), max_length=125)
- description = models.TextField(_('description'))
- is_read = models.BooleanField(default=False)
- publication = models.DateTimeField(_('date published'), auto_now_add=True)
- created_at = models.DateTimeField(_('created at'), auto_now_add=True)
- blog = models.ForeignKey(Blog, related_name='post',
- verbose_name=_('blog'),
- on_delete=models.CASCADE)
- class Meta:
- verbose_name = _('post')
- verbose_name_plural = _('posts')
- def __str__(self):
- return self.title
- def get_absolute_url(self):
- return reverse('blog:post_detail', kwargs={'id': self.id})
- @receiver(post_save, sender=Post)
- def post_created(sender, instance, created, **kwargs):
- if created:
- blog_title = instance.title
- post_url = instance.get_absolute_url()
- user_emails = instance.blog.subscriptions.all().values_list(
- 'email', flat=True)
- for email in user_emails:
- django_rq.enqueue(email_notification_subscriber, email,
- blog_title, post_url)
- # tasks.py
- from django.conf import settings
- from django.core.mail import send_mail, BadHeaderError
- from django_rq import job
- @job
- def email_notification_subscriber(email, blog_title, post_url):
- try:
- subject = 'Новый пост от %s' % blog_title
- message = f'''
- Блог <{blog_title}> опубликовал новый пост.
- Пост доступен по прямой ссылке - {post_url}.
- '''
- email_from = settings.EMAIL_HOST_USER
- email_to = [email]
- send_mail(subject, message, email_from, email_to)
- return True
- except BadHeaderError:
- return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement