Метод не разрешен (POST): / contact / sent / - PullRequest
0 голосов
/ 15 ноября 2018

Я получаю этот метод не разрешено (отправлять), как я не могу опубликовать свои формы. Что я мог делать неправильно. Я новичок в django. Может быть, мой url.py неверен или мой идентификатор формы неверен, что не позволяет публиковать данные. У меня есть файл forms.py, но я не уверен, что это может быть проблемой для моей проблемы

views.py

class ContactUsView(ContactFormView):
    """ Contact Us Form View """
    form_class = ContactUsForm

    def get_success_url(self):
        return reverse('messaging:contact_form_sent')


def clear_notification(request):
    """ Clears the notification for a given user"""

    Notifications.objects.filter(user=request.user).delete()
    return redirect(reverse('accounts:dashboard', args=(request.user,)))

urls.py

urlpatterns = [
    path(
        'contact/',
        views.ContactUsView.as_view(),
        name='contact_form'),
    path(
        r'contact/sent/',
        TemplateView.as_view(
            template_name='contact_form/contact_form_sent.html'),
        name='contact_form_sent'),
    path(r'clear/', views.clear_notification, name='clear_notification'),
]

contact_form.html

           <div class="row">
           <form id='ContactUsForm' method='post' action={% url 'messaging:contact_form_sent' %}><br>
            {% csrf_token %}
               <div class="col-md-6">
                   <div class="form-group">
                   {% csrf_token %}
                       <input type="text" class="form-control input-upper" id="fullname" placeholder="John Doe" name="fullname">
                   </div>
               </div>
               <div class="col-md-6">
                   <div class="form-group">
                   {% csrf_token %}
                       <input type="email" class="form-control input-upper" id="email" placeholder="Email" name="email">
                   </div>
               </div>
           </div><br><br>
           <div class="row">
               <div class="col-md-6">
                   <div class="form-group">
                   {% csrf_token %}
                       <input type="text" class="form-control input-upper" id="subject" placeholder="Subject" name="subject">
                   </div>
               </div>
            </div><br>
            <div class="row">
               <div class="col-md-10">
                   <div class="form-group">
                   {% csrf_token %}
                       <textarea class="form-control input-upper" id="message" placeholder="Message" name="message"></textarea>
                   </div>
                   {% csrf_token %}
                   <button type="submit" class="btn btn-primary btn-send-contact" value="SUBMIT">SEND</button>
               </div>
            </div><br><br>
            </form>
       </div>
    </div>
</div>
{% endblock %}

базовый вид

"""

"""

from django.views.generic.edit import FormView

from .forms import ContactForm

try:
    from django.urls import reverse
except ImportError:  # pragma: no cover
    from django.core.urlresolvers import reverse  # pragma: no cover


class ContactFormView(FormView):
    form_class = ContactForm
    recipient_list = None
    template_name = 'contact_form/contact_form.html'

    def form_valid(self, form):
        form.save()
        return super(ContactFormView, self).form_valid(form)

    def get_form_kwargs(self):
        # ContactForm instances require instantiation with an
        # HttpRequest.
        kwargs = super(ContactFormView, self).get_form_kwargs()
        kwargs.update({'request': self.request})

        # We may also have been given a recipient list when
        # instantiated.
        if self.recipient_list is not None:
            kwargs.update({'recipient_list': self.recipient_list})
        return kwargs

    def get_success_url(self):

        return reverse('contact_form_sent')

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Ваша форма публикуется непосредственно на странице подтверждения contact_form_sent, которая не ожидает публикации. Делая это, он обходит представление, которое фактически обрабатывает сообщение, ContactUsView.

Ваша форма действия должна быть messaging:contact_form.

0 голосов
/ 15 ноября 2018

По умолчанию TemplateView не разрешено POST, вам нужно просто переписать метод записи.

Пример:

class ContactUsView(TemplateView):
    template_name = 'contact_form/contact_form_sent.html'

    def post(self, request, *args, **kwargs):
        context = self.get_context_data()
        if context["form"].is_valid():
            print 'POST IS HERE'
        return super(TemplateView, self).render_to_response(context)

    def get_context_data(self, **kwargs):
        context = super(ContactUsView, self).get_context_data(**kwargs)
        form = ContactUsEmailForm(self.request.POST or None)  
        context["form"] = form
        return context
...