Django同时运行两个视图

时间:2017-05-08 15:53:38

标签: python django views

正如标题所说,我试图同时运行两个视图。或者至少,这是我认为我必须做的。我有一个让用户喜欢模型的系统,如果像count这样的模型大于3,那么应该将视图重定向到向客户端发送电子邮件消息的视图。我不希望将电子邮件消息代码放在与“喜欢”视图相同的视图中,因为它的工作方式与facebook上的按钮相同:它必须快速响应用户。此外,我想在任何情况下完成like_exam视图,如果计数器< 3或不。所以我现在拥有的是:

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...

1 个答案:

答案 0 :(得分:3)

无法同时运行两个视图。这不是你想要做的,因为“likes_email”函数不会返回对用户的响应,这是视图合同的一部分。

运行耗时操作的模式是将它们分配到一个单独的进程,通常是一个任务队列。在Django中管理这些内容的最佳方法是使用Celery