我有一个Django应用程序,它可以在我的views.py
内执行一个相当耗时的统计模型运行。
随着计算在view
的进行,我想在最终HttpResponse
之前通知用户,例如:
Step 1 completed
Step 2 running...
有没有办法在view
运行时向前端显示消息?
长时间运行的任务应异步执行。您可以将 dango-celery 用于异步任务,然后从您的视图中启动任务并将用户重定向到可以显示进度的页面。从芹菜任务中,您还可以更新进度值。
class Job(models.Model):
...
progress = models.PositiveSmallIntegerField(default=0)
...
如果你想动态显示进度值,那么你需要一个API或至少一个将被ajax击中的视图。像这样:
def progres_view(request, job_id):
value = 0
try:
job = Job.objects.get(pk=job_id)
except Job.DoesNotExist:
job = None
if job is not None:
value = job.progress
response = {"job": job_id, "progress": value}
return HttpResponse(json.dumps(response), content_type='application/json')