Сообщение электронной почты из контактной формы: метод не разрешен (POST) 405 - PullRequest
0 голосов
/ 24 апреля 2019

Я создаю страницу контактов на своем сайте портфолио, которая, когда пользователь заполняет и отправляет, автоматически отправляет ее в виде электронного письма на мою личную учетную запись электронной почты. Но когда я нажимаю «Отправить», я получаю «Метод не разрешен (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>

My views.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? Я не хочу рисковать слишком далеко, слишком сильно меняясь и ломая мой сайт!

1 Ответ

0 голосов
/ 24 апреля 2019

Django не поддерживает метод 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')

Остальное будет обработано автоматически

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...