#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)