2013-04-10 39 views
0

我有一個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 

    ... 

回答

2

你誤會該鏈接。並不是說每次修改字典都會保存會話。相反,會話保存是基於請求的:文檔只是解釋了即使在完整的請求/響應週期內,如果字典尚未分配,它也不會被修改。

您可能想要查看上面的部分,使用視圖之外的會話來了解如何手動更新會話。但是,我必須說我認爲你的設計有缺陷:我看不到用戶應該如何查看更新的會話值。您的表單處理是在原始請求過程中完成的,並且刷新只會中斷該操作,可能會使任務未完成。

真的,你應該看看類似Celery的東西來執行請求週期以外的長時間運行的進程。