Я предполагаю, что вы хотите, чтобы пользователь мог видеть, что сообщение было отправлено/запрос был обработан сразу после нажатия «Отправить». Я предлагаю вам использовать AJAX для достижения того, что вы делаете.
Мысль Процесс
Одна вещь, чтобы отметить, что вы, вероятно, хотите show a loading gif/svg или что-то, чтобы указать, что письмо находится в процессе отправки. В то время загрузки GIF отображается, выполните проверки формы:
если все в порядке: проследовать с просьбой AJAX отправить по электронной почте и возвращает сообщение об успешном/об ошибке, указывающее, был ли отправлен по электронной почте.
если проверка не удалась: только отображать сообщения об ошибках
Однако, если вы хотите, чтобы отобразить сообщение, как 'Спасибо', это что-то вроде этого:
Вероятно, это похоже на JS (если вы используете jQuery):
$('#form').on('submit', function(e) {
e.preventDefault();
// do some validation
// if the validation deems the form to be OK - display the 'Thank you!` message first THEN proceed to AJAX request.
$('#form').append('Thank you!');
// insert AJAX here
...
// if the validation returns errors - just display errors
...
});
Фактический запрос AJAX:
// AJAX request
$.ajax({
method: 'POST',
url: '../send_email/', # Just an example - this should be a url that handles a POST request and sends an email as a response
data: $('#form').serialize(),
success: function(response) {
// anything you want
// an example would be:
if (response.success) {
$('#form').append(response.success);
}
});
В вашей views.py
:
class SendEmail(View):
def post(self, request, *args, **kwargs):
if request.is_ajax():
send_mail(
'Subject here',
data['comentarios'],
'[email protected]',
['[email protected]'],
fail_silently=False,
)
return JsonResponse({'success': 'Just a JSON response to show things went ok.'})
return JsonResponse({'error': 'Oops, invalid request.'})
вы можете использовать любой механизм задачи shecduling (сельдерей, Huey и т.д.), это позволит решить проблему. – Cadmus
использовать http://michal.karzynski.pl/blog/2014/05/18/setting-up-an-asynchronous-task-queue-for-django-using-celery-redis/ для установки –