Задать вопрос

Как устранить проблему с непрекращающейся отправкой писем через форму на сайте?

Добрый вечер.
Есть сайт, на котором форма заявки есть на всех страницах. Для упрощения работы создал контекстный процессор для forms.py. Форма письма отправляет, но бесконечное количество, т.е. процесс отправки не завершается, пока не остановишь принудительно.

Forms.py
from django.core.context_processors import request
from django import forms
from django.shortcuts import render
from django.http import HttpResponse
from django.core.mail import send_mail, BadHeaderError
class ContactForm(forms.Form):
	subject = forms.CharField(max_length=100,widget=forms.TextInput(attrs = {'required': 'required'}))
	sender = forms.EmailField(widget=forms.TextInput(attrs = {'required': 'required'}))
	message = forms.CharField(widget = forms.Textarea(attrs = {'required': 'required'}))
	copy = forms.BooleanField(required = False)
def my_form(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            sender = form.cleaned_data['sender']
            message = form.cleaned_data['message']
            copy = form.cleaned_data['copy']
            plus = message + ' ' + sender

            recipients = ['mail@ya.ru']
            if copy:
                recipients.append(sender)
            try:
                send_mail(subject, plus, 'mail@ya.ru', recipients)
            except BadHeaderError: 
                return HttpResponse('Invalid header found')
            return render(request, 'single_index.html')
    else:
        form = ContactForm()
    return {'form': form}
  • Вопрос задан
  • 333 просмотра
Подписаться 2 Оценить 4 комментария
Пригласить эксперта
Ответы на вопрос 1
Mr_Floppy
@Mr_Floppy
При успешной обработке формы нужно делать не render, а redirect (т.к. при нажатии F5 форма отправится снова)

Еще на последней строчке Вы возвращаете форму, а нужно render(request, 'single_index.html', {'form': form})

request вообще не надо импортировать, это агрумент view-функции.

Также непонятно зачем оборачивать send_mail в try...except и ловить только BadHeaderError. Я бы ловил более широкий класс ошибок и говорил пользователю, что отправка не удалась.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы