web-dev-qa-db-fra.com

Exemple de formulaire de courrier électronique Python Django

Je voulais créer un formulaire de contact sur mon site web. Je peux trouver PHP des formulaires de messagerie partout, mais il n'y a pas d'exemple Django. Je ne sais pas comment le faire moi-même, alors je demande s'il y a quelqu'un qui pourrait me dire à partir de zéro - comment créer un formulaire de contact par courrier électronique sur un site web en utilisant Django?

11
Nhor

Un exemple simple pourrait être:

urls.py

from Django.conf.urls import patterns, url
from yourapp import views

urlpatterns = patterns(
    '',
    url(r'^email/$',
        views.email,
        name='email'
        ),
    url(r'^thanks/$',
        views.thanks,
        name='thanks'
        ),
)

forms.py

from Django import forms

class ContactForm(forms.Form):

    from_email = forms.EmailField(required=True)
    subject = forms.CharField(required=True)
    message = forms.CharField(widget=forms.Textarea)

views.py

from Django.core.mail import send_mail, BadHeaderError
from Django.http import HttpResponse, HttpResponseRedirect
from Django.shortcuts import render, redirect
from yourapp.forms import ContactForm

def email(request):
    if request.method == 'GET':
        form = ContactForm()
    else:
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            try:
                send_mail(subject, message, from_email, ['[email protected]'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('thanks')
    return render(request, "yourapp/email.html", {'form': form})

def thanks(request):
    return HttpResponse('Thank you for your message.')

email.html

<form method="post">
    {% csrf_token %}
    {{ form }}
    <div class="form-actions">
      <button type="submit">Send</button>
    </div>
</form>
30
iago1460

Si la simplicité est importante, Formspree pourrait être une alternative. Ils le rendent super facile.

Vous devez juste insérer quelque chose comme ceci dans votre code:

<form action="https://formspree.io/[email protected]"
      method="POST">
    <input type="text" name="name">
    <input type="email" name="_replyto">
    <textarea name="message"></textarea>
    <input type="submit" value="Send">
</form>

Ensuite, vous validez l'e-mail et vous êtes prêt à partir.

Pour plus d'informations, cette vidéo explique comment procéder.

1
J0ANMM
  1. À partir des modèles d'importation Django.conf.urls, url
  2. Depuis vos vues d'importation

Exemple

urlpatterns = patterns(
    '',
    url(r'^email/$',
        views.email,
        name='email'
        ),
    url(r'^thanks/$',
        views.thanks,
        name='thanks'
        ),
)
0
Avinash Kumar