在Django中从模式发送电子邮件

时间:2019-07-02 22:31:32

标签: python html django email modal-dialog

我正在尝试在模式窗口中创建一个简单的联系表单,并在开始时向控制台发送电子邮件,但是它不起作用。我已经准备好一切。

我已经正确设置了电子邮件后端,因为我可以从控制台发送电子邮件。 打开模式时,网站的URL不变。与此有关吗?

这就是我在控制台中得到的内容

[02/Jul/2019 22:30:22] "GET /contact/ HTTP/1.1" 200 1224

[02/Jul/2019 22:30:29] "POST / HTTP/1.1" 200 2229

views.py

def email(request):
    if request.method == "POST":
        form = ContactForm(request.POST)
        if form.is_valid():
            mail = form.cleaned_data["from_email"]
            subject = form.cleaned_data["subject"]
            message = form.cleaned_data["message"]
            send_mail(subject, message, mail, ["example@gmail.com"], fail_silently=False)
            messages.success("Done")
            return redirect("homepage")
    else:
        form = ContactForm()
    return render(request, "home_page/contact_form.html", {"form": form})

forms.py

class ContactForm(forms.Form):
    from_email = forms.EmailField(required=True)
    subject = forms.CharField(required=True)
    message = forms.CharField(widget=forms.Textarea)

urls.py

urlpatterns = [
    path('', views.home, name='homepage'),
    path('contact/', views.email, name='contact')]

和html

{% load crispy_forms_tags %}
<h1>Leave me a message</h1>
<form method="post" action="">
    {% csrf_token %}
    {{ form|crispy }}
    <div class="form-actions">
      <button>Send</button>
    </div>
</form>

修改

添加负责打开模式的代码: home.html

<a href="{% url 'contact' %}" rel="modal:open"><i class="far fa-envelope fa-3x"></i></a>

我的联系表单中的已修改操作,但未发送电子邮件并在新页面上打开了联系表单

action="{% url 'contact' %}"
[03/Jul/2019 06:31:30] "GET /contact/ HTTP/1.1" 200 1233
[03/Jul/2019 06:31:37] "POST /contact/ HTTP/1.1" 200 1372

1 个答案:

答案 0 :(得分:0)

您的表单似乎指向您的主页而不是电子邮件视图。尝试将action=""更改为action="/contact/",或者使用更合适的django方式action="{% url 'contact' %}"

更新: 如果视图收到POST请求并发回200,则代码有问题。尝试在“ if form.is_valid()”中添加“ else”。现在看来该表单未通过验证。