контактная страница django send_email

#python #django #django-forms #contact-form

#python #django #django-формы #контактная форма

Вопрос:

Я пытаюсь создать страницу контактов, которая будет принимать 17 входных данных от посетителя, а затем отправлять мне эту информацию по электронной почте. Я нашел много базовых руководств, но ни одного конкретного для того, чего я пытаюсь достичь. Пока это то, что у меня есть:

Я создал новый проект Django «contactform», а затем новое приложение «send_email»

Это мой forms.py файл найден- send_email/forms.py

 from django import forms

class ContactForm(forms.Form):
    title = forms.CharField(max_length=3, required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)
    identity_type = forms.CharField(required=True)
    identity_number = forms.IntegerField(required=True)
    current_job = forms.CharField(required=True)
    career_prospects = forms.CharField(required=True)
    age = forms.IntegerField(required=True)
    nationality = forms.CharField(required=True)
    address = forms.CharField(required=True)
    city = forms.CharField(required=True)
    province = forms.CharField(required=True)
    postal_code = forms.IntegerField(required=True)
    contact_number = forms.IntegerField(required=True)
    daytime_contact_number = forms.IntegerField(required=True)
    evening_contact_number = forms.IntegerField(required=True)
    email_address = forms.EmailField(required=True)
  

Мой views.py файл найден- send_email/views.py

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

def email(request):
if request.method == 'GET':
    form = ContactForm()
else:
    form = ContactForm(request.POST)
    if form.is_valid():
        title = form.cleaned_data['title']
        first_name = form.cleaned_data['first_name']
        last_name = form.cleaned_data['last_name']
        identity_type = form.cleaned_data['identity_type']
        identity_number = form.cleaned_data['identity_number']
        current_job = form.cleaned_data['current_job']
        career_prospects = form.cleaned_data['career_prospects']
        age = form.cleaned_data['age']
        nationality = form.cleaned_data['nationality']
        address = form.cleaned_data['address']
        city = form.cleaned_data['city']
        province = form.cleaned_data['province']
        postal_code = form.cleaned_data['postal_code']
        contact_number = form.cleaned_data['contact_number']
        daytime_contact_number = form.cleaned_data['daytime_contact_number']
        evening_contact_number = form.cleaned_data['evening_contact_number']
        email_address = form.cleaned_data['email_address']
        try:
            send_mail(first_name, message, email_address ['admin@example.com'])
        except BadHeaderError:
            return HttpResponse('Invalid header found.')
        return redirect('success')
return render(request, "email.html", {'form': form})

def success(request):
return HttpResponse('Success! Thank you for your message.')
  

email.html следующим образом:

 <h1>Contact Us</h1>
<form method="post">    
{% csrf_token %}
{{ form.as_ul }}
<div class="form-actions">
    <button type="submit">Send</button>
</div>  
  

Теперь я хорошо знаю, что Django send_mail принимает эти аргументы: (тема, сообщение, отправитель, получатели) Я просто хочу знать, есть ли способ передать данные, которые я запрашиваю, в параметр «сообщение» и отправить их по электронной почте в виде списка?

Комментарии:

1. Я понятия не имею, что это значит: я просто хочу знать, есть ли способ передать запрашиваемые данные в параметр «сообщение» и отправить их по электронной почте в виде списка?

2. Передайте данные из моего forms.py к аргументу «сообщение» в send_mail в моем views.py . Или есть другой способ отправить данные по электронной почте из формы? пожалуйста, скажите мне, как.

3. message = str(form.cleaned_data) Не работает?

4. Большое вам спасибо! это сработало!

Ответ №1:

Вот и все:


email.template.html

 Hello, someone filled out a contact form with the following information:

First name: {{ first_name }}
Last name : {{ last_name }}
. . . and so on
  

— или, если вы ленивы, как я —

 Hello, someone filled out a contact form with the following information:
{% for key, value in form.cleaned_data.items %}
{{ key }}: {{ value }}
{% endfor %}
  

 from django.template.loader import get_template
from django.template import Context

def email(request):
    . . .
    context = Context(locals())
    template = get_template('email.template.html')
    message = template.render(context)