簡體   English   中英

Django保存對象后如何發送電子郵件,但發送電子郵件功能不要延遲返回HttpResponse

[英]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。

使用本地SMTP服務器。

這將導致郵件幾乎立即排隊(即使未送達),因此您可以發送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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM