2017-09-14 6 views
0

Je ne sais pas pourquoi je reçois cette erreur dans le bash:formulaire e-mail contact python Django erreur après pas autorisé 405

Méthode non autorisée (POST):/programme/[14/Sep/2017 20:47:24] "POST/programme/ HTTP/1.1" 405 0

views.py:

from django.views.generic import TemplateView from Profile.forms import ContactForm from django.core.mail import send_mail, BadHeaderError, EmailMessage from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render, redirect from django.template import Context from django.template.loader import get_template 



# Create your views here. class HomePageView(TemplateView): 
    def get(self, request, **kwargs): 
     return render(request, 'index.html', context=None) 

class ProjectsPageView(TemplateView): 
    template_name = 'projects.html' 

class TutorialsPageView(TemplateView): 
    template_name = 'tutorials.html' 

class ArticlesPageView(TemplateView): 
    template_name = 'articles.html' 

class LanguagesPageView(TemplateView): 
    template_name = 'languages.html' 

class VideosPageView(TemplateView): 
    template_name = 'videos.html' 

class CurriculumPageView(TemplateView): 
    template_name = 'curriculum.html' 


def post(self, request, **kwargs): 
    form_class = ContactForm 

    # new logic! 
    if request.method == 'POST': 
     form = form_class(data=request.POST) 

     if form.is_valid(): 
      contact_name = request.POST.get(
       'contact' 
      , '') 
      contact_email = request.POST.get(
       'email' 
      , '') 
      form_content = request.POST.get('message', '') 

      # Email the profile with the 
      # contact information 
      template = get_template('templates/contact_template.txt') 
      context = Context({ 
       'contact_name': contact_name, 
       'contact_email': contact_email, 
       'form_content': form_content, 
      }) 
      content = template.render(context) 

      email = EmailMessage(
       "New contact form submission", 
       content, 
       "Your website" +'', 
       ['[email protected]'], 
       headers = {'Reply-To': contact_email } 
      ) 
      email.send() 
      return redirect('curriculum') 

    return render(request, 'PageJMMA/Profile/templates/index.html', { 
     'form': form_class, 
    }) 

url.py:

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

urlpatterns = [ 
    url(r'^curriculum/$', views.CurriculumPageView.as_view(), name='curriculum') ] 

forms.py:

from django import forms 

class ContactForm(forms.Form): 
    contact_name = forms.CharField(required=True) 
    contact_email = forms.EmailField(required=True) 
    content = forms.CharField(
     required=True, 
     widget=forms.Textarea 
    ) 

curriculum.html (seule la partie de forme):

<div class="w3-col m6"> 
     <form method="POST" action="" role="form"> 
      <div class="w3-row-padding" style="margin:0 -16px 8px -16px"> 
      <div class="w3-half">    
       <input class="w3-input w3-border" type="text" placeholder="Name" required name="contact"> 
      </div> 
      <div class="w3-half"> 
       <input class="w3-input w3-border" type="text" placeholder="Email" required name="email"> 
      </div> 
      </div> 
      <input class="w3-input w3-border" type="text" placeholder="Message" required name="message"> 
       {% csrf_token %} 
       {{ form.as_p }}    
       <button class="w3-button w3-black w3-section w3-right" type="submit">SEND</button> 
     </form> 
     </div>' 

Répondre

0

Votre fonction de poste doit être à l'intérieur TemplateView pour remplacer message par défaut de TemplateView. Generic TemplateView n'est pas conçu pour être utilisé de cette façon, mais la méthode post-override devrait fonctionner.

class CurriculumPageView(TemplateView): 
    template_name = 'curriculum.html' 


    def post(self, request, **kwargs): 
     form_class = ContactForm 

     # new logic! 
     if request.method == 'POST': 
      form = form_class(data=request.POST) 

      if form.is_valid(): 
       contact_name = request.POST.get(
        'contact' 
       , '') 
       contact_email = request.POST.get(
        'email' 
       , '') 
       form_content = request.POST.get('message', '') 

       # Email the profile with the 
       # contact information 
       template = get_template('templates/contact_template.txt') 
       context = Context({ 
        'contact_name': contact_name, 
        'contact_email': contact_email, 
        'form_content': form_content, 
       }) 
       content = template.render(context) 

       email = EmailMessage(
        "New contact form submission", 
        content, 
        "Your website" +'', 
        ['[email protected]'], 
        headers = {'Reply-To': contact_email } 
       ) 
       email.send() 
       return redirect('curriculum') 

     return render(request, 'PageJMMA/Profile/templates/index.html', { 
      'form': form_class, 
     }) 

Je recommande également plutôt en utilisant FormView