Django 运行 同时查看两个视图
Django run two views at the same time
正如标题所说,我正在尝试同时 运行 两个视图。或者至少,那是我认为我必须做的。我有让用户喜欢模型的系统,如果喜欢的模型计数大于 3,则应将视图重定向到向客户端发送电子邮件的视图。我不想将电子邮件消息代码放在与 "like" 视图相同的视图中,因为 like 与 facebook 上的 like 按钮一样工作:它必须快速响应用户。此外,我希望 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...
无法同时 运行 两个视图。这不是您想要做的,因为 "likes_email" 函数不会 return 对用户的响应,这是视图契约的一部分。
运行宁耗时的操作的模式是将它们分包给一个单独的进程,通常带有一个任务队列。在 Django 中管理这些的最佳方法是使用 Celery.
正如标题所说,我正在尝试同时 运行 两个视图。或者至少,那是我认为我必须做的。我有让用户喜欢模型的系统,如果喜欢的模型计数大于 3,则应将视图重定向到向客户端发送电子邮件的视图。我不想将电子邮件消息代码放在与 "like" 视图相同的视图中,因为 like 与 facebook 上的 like 按钮一样工作:它必须快速响应用户。此外,我希望 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...
无法同时 运行 两个视图。这不是您想要做的,因为 "likes_email" 函数不会 return 对用户的响应,这是视图契约的一部分。
运行宁耗时的操作的模式是将它们分包给一个单独的进程,通常带有一个任务队列。在 Django 中管理这些的最佳方法是使用 Celery.