不能在全局基础上维护页调用之间的状态,因此需要将数据存储在数据库中。此外,视图返回页面后无法与浏览器协商任何内容,因此需要将其拆分为多个视图,并为作业生成单独的线程。下面是一个可能有用的概述:
def do_something():
my_job = Jobs.get(id=blah)
my_job.in_progress = True
my_job.save()
# Do some stuff here....
my_job.in_progress = False
my_job.save()
def step1(request):
in_progress = Jobs.get(id=blah).in_progress
if not in_progress:
if request.method == 'POST':
form = SyncJobForm(request.POST)
if form.is_valid():
thread.start_new_thread(do_something)
return HttpResponseRedirect(step2)
else:
return render_to_response('form.html', 'form': form)
else:
form = SyncJobForm()
return render_to_response('form.html', 'form': form)
else:
return HttpResponseRedirect(step2)
def step2(request):
in_progress = Jobs.get(id=blah).in_progress
if in_progress:
return render_to_response('in_progress.html')
else:
return HttpResponseRedirect(finished)
def finished(request):
return render_to_response('finished.html')
那就翻页吧
in_progress.html
finished.html
.
有更复杂的方法可以做到这一点(编写Javascript定期轮询服务器),但是仍然需要编写不同的视图来响应相应的信息。此外,您可以使用一个作业管理框架,如
Celery
创建和执行作业,但仍然需要创建单独的视图来处理状态信息。