【发布时间】:2016-03-07 11:41:10
【问题描述】:
我已经使用 Django 整理了一个联系表单,但我的 send_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>
(我意识到我可能应该使用 Django 表单类来执行此操作,但我正在尝试使用原始 HTML 表单来执行此操作。)
从我的urls.py 文件中调用/contact/auth:
url(r'^contact/', views.ContactView.as_view(), name='contact'),
url(r'^contact/auth/', views.send_email),
在我的views.py 文件中调用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_email 方法,但它似乎没有被调用。
我还在终端中得到以下输出:
【问题讨论】:
-
请您提供您正在使用的 Django 版本吗?
-
我使用的是 1.9 版
-
好的,那么您的问题如下。在 urls.py 中,您需要 import views 然后才能使用它们。自 Django 1.8 起,不推荐使用字符串作为第二个参数
-
我已经导入了视图,但你是说 url 应该是这样的?
url(r'^contact/auth/', views.send_email), -
405 响应码表示该方法不被允许。这意味着该 url 不支持 POST 请求。你能添加你的整个视图代码吗?
标签: python django forms email post