我想在将数据保存到数据库后发送电子邮件,但我不想等待完成发送电子邮件后返回HTTP
响应,我想直接返回HTTP
响应,然后发送Django自己的电子邮件。
def received(request):
login=get_login(request)
received=True
cluster_list=models.Cluster.objects.all()
Asset_Type=models.CategoryOfAsset.objects.all()
if request.method=="GET":
return render(request,"received.html",locals())
if request.is_ajax():
try:
req=json.loads(request.body)
meta_data_dict=req['meta_data']
item_data_dict=req['all_item_data']['item_data']
received_or_shipment=True
insert_meta_item_to_DB(meta_data_dict,item_data_dict,received_or_shipment)
sendTemplateEmail(meta_data_dict,item_data_dict)
return HttpResponse(json.dumps('sucessful'))
except Exception, e:
logger.error(e)
现在代码会导致此错误:
ValueError:视图tool.views.received没有返回 HttpResponse对象
它返回了None。
答案 0 :(得分:2)
将导致邮件排队(即使它未被发送)几乎立即排队,因此您可以发送您的http响应,而不会被发送电子邮件的延迟所阻碍。
使用最简单的形式,您可以将电子邮件消息放入表中,让cron作业定期检查该表并发送需要发送的任何消息。
稍微复杂一点的方法是使用Redis并让django CLI收听。
更复杂的(?)解决方案是使用Celery Task。
答案 1 :(得分:1)
最简单的解决方案是以异步方式运行:
import threading
def run_async(func, args):
threading.Thread(target=func, args=args).start()
然后:
run_async([function], ([args]))