2017-05-08 63 views
-1

正如標題所示,我試圖同時運行兩個視圖。或者至少,這是我認爲我必須做的。我有讓用戶喜歡模型的系統,如果像count這樣的模型大於3,則視圖應該被重定向到發送電子郵件消息給客戶端的視圖。我不想將電子郵件消息代碼放在與「like」視圖相同的視圖中,就像在facebook上按鈕一樣工作:它必須快速回復給用戶。我還希望在任何情況下都能完成like_exam視圖,如果計數器< 3或不。所以我現在擁有的是:Django同時運行兩個視圖

def like_exam(request, letnik_id, classes_id, subject_id): 
    exam_id = request.GET.get('exam') 
    exam = get_object_or_404(Exam, id=exam_id) 
    counter = exam.exam_likes.count() 
    user = request.user 
    if user in exam.exam_likes.all(): 
     exam.exam_likes.remove(user) 
     return JsonResponse({"like": "unliked"}) 
    else: 
     exam.exam_likes.add(user) 
     if counter < 3: 
      html = likes_email(exam) 
      return HttpResponse(html) 
     # i want the json to be posted in any case: 
     return JsonResponse({"like": "liked"}) 

def likes_email(exam): 
    ....sends email... 

回答

3

沒有辦法同時運行兩個視圖。這不是你想要做的,因爲「likes_email」函數不會向用戶返回響應,這是視圖合同的一部分。

用於運行耗時操作的模式是將它們移出到單獨的進程,通常使用任務隊列。在Django中管理這些的最好方法是使用Celery