我正在尝试与python django建立联系表单,此时它运行正常,问题是我必须等到已发送的电子邮件消息才能获得Httpresponse
。
有没有办法先退回Httpresponse
然后发送电子邮件?
send_mail(
'Subject here',
data['comentarios'],
'myemail@gmail.com',
['myemail@gmail.com'],
fail_silently=False,
)
return HttpResponse('bien') #es menor a 7 digitos
答案 0 :(得分:1)
我认为您希望让用户看到电子邮件已发送/请求已在点击“发送”后立即处理。我建议您使用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'],
'myemail@gmail.com',
['myemail@gmail.com'],
fail_silently=False,
)
return JsonResponse({'success': 'Just a JSON response to show things went ok.'})
return JsonResponse({'error': 'Oops, invalid request.'})