【发布时间】:2020-05-17 07:12:05
【问题描述】:
我正在构建一个简单的博客应用程序。我的博客在开发服务器上启动并运行。现在,我希望每次我/管理员创建新博客文章时向所有订阅者发送邮件。我知道使用 Django 的 send_email 库,但我不知道如何自动化该过程,即每次创建另一个“blog_post”对象时如何使用 send_email() 自动发送电子邮件?
注意:我正在使用 Django 的管理界面创建新的“blog_post”对象,所以基本上当我“保存”对象时,我想发送电子邮件。
我是 Django 新手,任何建议、指导都会有很大帮助
代码如下: 信号.py
@receiver(signals.post_save, sender=Post)
def send_post_mail(sender, instance, created, **kwargs):
print('signal send')
subject = "Thank you for registering with us"
send_mail(subject, 'Body', 'sender@gmail.com',
['reciever@gmail.com'], fail_silently=False,)
模型.py
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,
unique = True)
author = models.ForeignKey(User,
related_name='blog_posts',
on_delete=models.CASCADE)
audio = models.URLField(max_length = 200, default =
"spotify:episode:0Vbl7RvX3KE0lSkRmy9Wjj")
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
apps.py
from django.apps import AppConfig
class BlogConfig(AppConfig):
name = 'blog'
def ready(self):
import blog.signals
views.py
def post_list(request):
posts = Post.objects.order_by('-publish')
return render(request, 'template.html', context = {'post':posts})
博客/urls.py
urlpatterns = [
#path('', views.Postlist, name='main-view'),
path('', views.get_name, name='main-form-view'),
path('<slug:slug>', views.detail_post, name='detail-post')
]
settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'sender@gmail.com'
EMAIL_HOST_PASSWORD = 'seder's account password'
EMAIL_USE_TLS = False
init.py
default_app_config = 'blog.apps.BlogConfig'
编辑 :如上图配置app.py和init.py后生效。
【问题讨论】:
-
你试过信号吗?
-
@HeisAif,感谢您的快速回复。信号的问题是我正在使用 Django 的管理界面来创建和保存对象。如果我明确创建了另一个表单,那么我可以创建该表单的一个实例,并在每次调用它时使用信号发送邮件,但就像我说的那样,我在这里使用的是 Django 的管理界面
-
博文的模型是什么?即使从管理界面创建模型,您也可以在创建模型时使用信号。
-
好的,所以我有一个名为“blog_post”的模型,其中包含 4 个字段。然后我使用管理员界面创建 blog_posts 对象,然后使用视图创建所有 blog_posts 对象并将它们显示在我的网站上。我知道在我创建的表单中使用信号,但是当我从管理员站点创建对象时如何使用信号?
标签: django django-email