Python Django如何在保存对象后发送电子邮件,但发送电子邮件功能不';t延迟返回HttpResponse
我想在将数据保存到数据库后发送电子邮件,但我不想在完成发送电子邮件后等待返回Python Django如何在保存对象后发送电子邮件,但发送电子邮件功能不';t延迟返回HttpResponse,python,django,email,Python,Django,Email,我想在将数据保存到数据库后发送电子邮件,但我不想在完成发送电子邮件后等待返回HTTP响应,我想直接返回HTTP响应,然后由Django self发送电子邮件 def received(request): login=get_login(request) received=True cluster_list=models.Cluster.objects.all() Asset_Type=models.CategoryOfAsset.objects.all()
HTTP
响应,我想直接返回HTTP
响应,然后由Django self发送电子邮件
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:view tool.views.received未返回
HttpResponse对象
它返回的是无。使用本地SMTP服务器。
这将导致邮件几乎立即排队(即使未送达),因此您可以发送http响应,而不会因发送电子邮件的延迟而受阻
使用任务队列
在最简单的形式中,您可以将电子邮件消息放入一个表中,让cron job定期检查该表并发送任何需要发送的消息
一个稍微复杂一点的方法是使用并监听它
更复杂的(?)解决方案是使用芹菜任务。使用本地SMTP服务器。
这将导致邮件几乎立即排队(即使未送达),因此您可以发送http响应,而不会因发送电子邮件的延迟而受阻
使用任务队列
在最简单的形式中,您可以将电子邮件消息放入一个表中,让cron job定期检查该表并发送任何需要发送的消息
一个稍微复杂一点的方法是使用并监听它
更复杂的(?)解决方案是使用芹菜任务。最简单的解决方案是异步运行:
import threading
def run_async(func, args):
threading.Thread(target=func, args=args).start()
然后:
run_async([function], ([args]))
最简单的解决方案是异步运行:
import threading
def run_async(func, args):
threading.Thread(target=func, args=args).start()
然后:
run_async([function], ([args]))