【问题标题】:How can I send an email with the data posted on a class-based form in Django如何发送一封电子邮件,其中包含在 Django 中基于类的表单上发布的数据
【发布时间】:2020-02-29 17:27:25
【问题描述】:

我的 django 应用程序有一个基于类的视图,它可以抓取填写在表单中的报价请求并将该信息存储在数据库中。

当有人这样做时,我想使用发送自己和电子邮件,并将数据包含在邮件主题和消息中。

我得到了正确的电子邮件部分,我可以发送预定义的消息。但找不到使用输入信息的方法。

这是我目前所拥有的:

urls.py

urlpatterns = [
    path('', views.index, name='index'),   
    path('quote/', QuoteCreateView.as_view(), name='quote'),
    path('quote/thankyou/', views.quoteThankyou, name='quote_thankyou'),
]

views.py

class QuoteCreateView(CreateView):
    login_required = False
    model = Quote
    fields = ['fullname','email','date','description']

    def form_valid(self,form):
        form.instance.author = self.request.user

        return super().form_valid(form)

def quoteThankyou(request):
    subject = 'Message subject'
    message = 'Message'
    send_mail(
        subject,
        message,
        'sender@email.com',
        ['receiver@email.com'],
        fail_silently=False,
        )
    return render(request,'blog/quote_thankyou.html')

models.py

class Quote(models.Model):
    fullname = models.CharField(max_length=100)
    email = models.EmailField(max_length=100)
    date_sent = models.DateTimeField(default=timezone.now)
    date = models.DateTimeField()
    description = models.TextField()

    def __str__(self):
        return self.fullname 

    def get_absolute_url(self): 
        return reverse('quote_thankyou', kwargs={})

感谢您的帮助。

【问题讨论】:

  • 在 QuoteCreateView 类中,您可以覆盖 save() 方法并在其中包含对 quoteThankyou 的调用。顺便说一句,对于函数视图,命名约定将是 quote_thank_you,而不是驼峰式。
  • 在视图内发送电子邮件时要小心。这将阻止下一个视图加载,直到电子邮件发送完毕。任何与此相关的问题都会导致网站挂起。您通常应该使用 celery 或类似的东西异步发送电子邮件。 medium.com/@EmadMokhtar/…

标签: python django email


【解决方案1】:

你可以定义success_url,当你收到一个有效的表单时,重定向到指定的url。

看起来像这样:

views.py

from django.urls import reverse

class QuoteCreateView(CreateView):
    login_required = False
    model = Quote
    fields = ['fullname','email','date','description']
    success_url = reverse('quote_thankyou')

    def form_valid(self,form):
        form.instance.author = self.request.user

        return super().form_valid(form)

def quoteThankyou(request):
    subject = 'Message subject'
    message = 'Message'
    send_mail(
        subject,
        message,
        'sender@email.com',
        ['receiver@email.com'],
        fail_silently=False,
        )
    return render(request,'blog/quote_thankyou.html')

这会在提交有效表单后将用户重定向到 URL“quote_thankyou”,并且视图将发送电子邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2015-06-08
    • 2019-09-10
    • 2014-01-07
    • 2023-03-18
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多