我有一个Django Form
,在提交后会调用相当耗时的操作。此操作(Python函数)可以随时创建数据。
创建相关数据后,我想将其存储到活动session
,以便用户可以在生成结果时看到结果(现在通过简单的刷新)。
我写了一个模板,显示session
的表单和所有当前字段。但是,似乎会话仅在长时间运行的函数返回时保存为完整(在执行期间刷新页面时不显示任何已修改的组件)。从When sessions are saved开始,我被认为会在修改字典后立即更新会话。
我是否误解了如何保存会话?或者,还有另一种方法来实现我正在寻找的东西吗?
以下是相关views.py
代码的摘要:
def my_form(request):
""" Render the form, with any results included below. """
if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
request.session.clear()
long_running_func(request.session, form)
else:
form = MyForm()
return render_to_response('my_form.html', {'form': form,
'session': request.session})
def long_running_func(session, form):
session["status"] = "Executing"
result_data = long_running_task()
session["results"] = result_data
...
答案 0 :(得分:2)
你误解了这个链接。它没有说每次修改字典时都会保存会话。相反,会话保存基于请求:文档只是解释即使在完整的请求/响应周期内,如果尚未分配字典,也不会修改它。
您可能希望查看上面的部分,使用视图外的会话,以了解如何手动更新会话。但是,我必须说我认为您的设计存在缺陷:我无法看到用户应该如何查看更新的会话值。您的表单处理是在原始请求过程中完成的,刷新只会中断该操作,可能会使任务未完成。
实际上,你应该研究像Celery这样的东西,以便在请求周期之外执行长时间运行的进程。