【问题标题】:Email from contact form error: Method Not Allowed (POST) 405来自联系表单错误的电子邮件:不允许使用方法 (POST) 405
【发布时间】:2019-09-14 05:10:30
【问题描述】:

我正在我的投资组合网站上创建一个联系页面,当用户填写并提交时,它会自动将其作为电子邮件发送到我的个人电子邮件帐户。但是当我点击提交时,我的终端中出现“方法不允许(POST):/contact/”,浏览器中出现“HTTP ERROR 405”,并且我的帐户中没有电子邮件。

我的 HTML:

 <form action="" method="POST">

  {% csrf_token %}

  <div class="row form-group">
    <div class="col">
      <input name="f-name" type="text" class="form-control" placeholder="First name" required>
    </div>
    <div class="col">
      <input name="s-name" type="text" class="form-control" placeholder="Last name" required>
    </div>
  </div>

  <div class="form-group">
    <input name="email" type="email" class="form-control" id="email-input" aria-describedby="emailHelp" placeholder="name@mail.com" required>
    <small id="emailHelp" class="form-text text-muted">I Wont Share Your Email!</small>
  </div>

  <div class="form-group text-center">
    <textarea name="e-message" class="form-control" id="exampleFormControlTextarea1" rows="3" placeholder="your message..." required></textarea>
  </div>

  <button type="submit" class="btn btn-primary">Send</button>

</form>

我的意见.py:

class ContactView(TemplateView):
     template_name = 'contact.html'

     def send_message(self, request):
        if request.method == 'POST':
            message = request.POST['f-name', 's-name', 'email', 'e-message']
            send_mail('Contact Form', message,['email@gmail.com'],
            fail_silently=False)

            return render(request, 'thanks.html')

我的项目 urls.py

 from django.contrib import admin
 from django.urls import path, include
 from django.contrib.auth import views
 from blog import views

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
    path('projects/', views.ProjectView.as_view(), name='projects'),
    path('blog/', views.BlogView.as_view(), name='blog'),
    path('contact/', views.ContactView.as_view(), name='contact'),
    path('thanks/', views.ThanksView.as_view(), name='thanks'),

我的应用程序 urls.py

from django.conf.urls import url
from blog import views


app_name = 'blog'

urlpatterns = [
    url(r'^$', views.AboutView.as_view(), name='about'),
    url(r'^projects/$', views.ProjectView.as_view(), name='projects'),
    url(r'^blog/$', views.BlogView.as_view(), name='blog'),
    url(r'^contact/$', views.ContactView.as_view(), name='contact'),
    url(r'^thanks/$', views.ThanksView.as_view(), name='thanks'),

我一直在寻找类似的答案几个小时,到目前为止,任何类似的东西都没有帮助也许我应该在 Django 表单中重新构建我的表单?我不想冒险做太多改变而破坏我的网站!

【问题讨论】:

    标签: python html django


    【解决方案1】:

    Django 不隐式支持模板视图上的 post 方法。您必须像这样在模板视图中自己定义 post 方法

    class ContactView(TemplateView):
         template_name = 'contact.html'
    
         def post(self, request, *args, **kwargs):
            message = request.POST['e-message']
            send_mail('Contact Form', message,['email@gmail.com'], fail_silently=False)
    
            return render(request, 'thanks.html')
    

    剩下的会自动处理

    【讨论】:

    • 我按照你的说法进行了更改,但从那里我收到了一个新错误。 MultiValueDictKeyError at /contact/ ..('f-name', 's-name', 'email', 'e-message')
    • 好的,我刚刚从问题中复制了代码。查看我的编辑。
    • 好的,我想我们已经接近了 我从列表中删除了所有其他项目,所以我只有 ['e-message'] 现在我收到“SMTPAuthenticationError at /contact/”“Application - 需要特定密码。”我已将正确的密码放入我的 settings.py 文件中,我使用我的常规 gmail 地址作为我的 EMAIL_HOST_USER,TLS = True 和 SSL = False。我应该使用不同的 EMAIL_HOST 而不是使用与我发送的相同的吗?
    • 我启用了 2 因素身份验证,我在我的 Gmail 帐户上创建了应用程序密码,现在一切正常!非常感谢!
    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 2012-08-24
    • 2018-02-16
    • 1970-01-01
    • 2019-07-05
    • 2013-12-05
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多