![](/img/trans.png)
[英]Error: The view didn't return an HttpResponse, when trying to send email
[英]Django how to send the email after save the object,but send email function don't delay return HttpResponse
我想在將數據保存到數據庫中后發送電子郵件,但是我不想在發送完電子郵件后返回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:視圖tool.views.received沒有返回HttpResponse對象
它返回None。
這將導致郵件幾乎立即排隊(即使未送達),因此您可以發送http響應,而不會因發送電子郵件的延遲而受阻。
以最簡單的形式,您只需將電子郵件插入表中,然后讓cron作業定期檢查該表並發送任何需要發送的消息。
稍微復雜一點的方法是使用Redis並讓django CLI監聽。
一個更復雜的解決方案是使用Celery Task。
最簡單的解決方案是異步運行:
import threading
def run_async(func, args):
threading.Thread(target=func, args=args).start()
接着:
run_async([function], ([args]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.