Python Can';t在Django 1.9中发送电子邮件
我已经用Django制作了一个联系表单,但是我无法让我的Python Can';t在Django 1.9中发送电子邮件,python,django,forms,email,post,Python,Django,Forms,Email,Post,我已经用Django制作了一个联系表单,但是我无法让我的send\u email方法发挥作用 我的表单模板如下所示: <form action="/contact/auth" method="post"> {% csrf_token %} <br><br> <input type=text class="formfields" placeholder="Name" n
send\u email
方法发挥作用
我的表单模板如下所示:
<form action="/contact/auth" method="post">
{% csrf_token %}
<br><br>
<input type=text class="formfields" placeholder="Name" name="name">
<br><br>
<input type=email class="formfields" placeholder="Email" name="contact_email">
<br><br>
<textarea type=text placeholder="Tell Us About Your Project" name="message"></textarea>
<br><br>
<input type="hidden" value="" id="num1setup" name="num1setup">
<input type="hidden" value="" id="num2setup" name="num2setup">
<div id="sendcontainer">
<div id="whatis">What is  </div><div id="num1"></div><div id="plus">  +  </div><div id="num2">?</div><br>
<div id="sumcontainer">
<input id="sum" type="sum" name="sum">
<br><br>
</div>
<input class="submit" type=submit value="Send">
</div>
</form>
url(r'^contact123/auth/', views.send_email, name='post_url'),
它调用myviews.py
文件中的send\u email
方法:
url(r'^contact/', views.ContactView.as_view(), name='contact'),
url(r'^contact/auth/', views.send_email),
from django.views import generic
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
class ContactView(generic.TemplateView):
template_name = 'contactpage.html'
print("contactpage")
def send_email(request):
print("working")
name = request.POST.get('name')
contact_email = request.POST.get('contact_email')
subject = 'Message from: %s' %name
message = request.POST.get('message')
if subject and message and contact_email:
try:
send_mail(subject, message, contact_email, ['example@example'], fail_silently=False)
except BadHeaderError:
return HttpResponse('Invalid header found.')
return HttpResponseRedirect('/contact/thanks')
else:
# In reality we'd use a form class
# to get proper validation errors.
return HttpResponse('Make sure all fields are entered and valid.')
这将成功重定向到/contact/auth
,但此后不会发生任何其他情况。我试过测试send\u email
方法,但它似乎没有被调用
在终端中,我还获得以下输出:
问题在于模式。您正在调用的
contact/auth
与模式url(r'^contact/auth/',views.send_email)不匹配,因为后面有斜杠。您必须使用联系/auth/
。此外,仅为获取信息,所有post调用都必须有尾随斜杠。这就是405响应返回的原因。正如Django提到的
Django按顺序运行每个URL模式,并在与请求的URL匹配的第一个模式处停止
调用/contact/auth/
首先与/contact
匹配,并且您没有在联系人视图中提供post
功能,这就是您获得405的原因。所以有两种方法可以解决:
1.
只需将/contact/auth/
更改为/contact123/auth/
(注意后面的斜杠)
我建议你这样写:
<form action="/contact/auth" method="post">
{% csrf_token %}
<br><br>
<input type=text class="formfields" placeholder="Name" name="name">
<br><br>
<input type=email class="formfields" placeholder="Email" name="contact_email">
<br><br>
<textarea type=text placeholder="Tell Us About Your Project" name="message"></textarea>
<br><br>
<input type="hidden" value="" id="num1setup" name="num1setup">
<input type="hidden" value="" id="num2setup" name="num2setup">
<div id="sendcontainer">
<div id="whatis">What is  </div><div id="num1"></div><div id="plus">  +  </div><div id="num2">?</div><br>
<div id="sumcontainer">
<input id="sum" type="sum" name="sum">
<br><br>
</div>
<input class="submit" type=submit value="Send">
</div>
</form>
url(r'^contact123/auth/', views.send_email, name='post_url'),
这是:
<form action="{% url 'post_url' %}" method="post">
...
...
这将使更改url模式更加容易
2.
添加尾随的$
如下url(r'^contact/$,views.ContactView.as_view(),name='contact'),
这两种方法中的任何一种都很好,正如我测试的那样。请包括您正在使用的Django版本好吗?我使用的是1.9版本好的,那么您的问题如下。在URL.py中,您需要导入视图,然后才能使用它们。由于Django 1.8I已经导入了视图,所以使用字符串作为第二个参数已被弃用,但您是说url应该是这样的<代码>url(r'^contact/auth/,views.send_email),
405响应代码表示不允许使用此方法。这意味着url不支持POST请求。能否添加您的整个视图代码?