4
我有一個管理操作,它將當前選擇和一個處理程序類(object
的子類)存儲到會話中,並重定向到處理選擇的另一個頁面。但是,由於某種原因,每當我這樣做時,整個會話都會丟失。Django會話意外丟失數據
實際情況是,在調用視圖函數時會出現錯誤,表明會話沒有鍵'action_options'。深入研究實際發生的事情,變量會在會話中設置好,但在調用視圖時,會話是完全空的,包括之前肯定存在的管理員登錄。所有其他頁面(即內置管理頁面)加載正常。
這裏的行動:
def myaction(self, request, queryset):
opts = request.session.setdefault('action_options', {})
opts['queryset'] = queryset
opts['handler'] = MyHandlerClass
request.session.modified = True
return HttpResponseRedirect(reverse('myapp.views.handler_view'))
而這裏的觀點,目前剛剛打印出的選項設置:
def handler_view(request):
opts = request.session['action_options']
return HttpResponse(str(opts))
我也曾嘗試直接存儲查詢集,即request.session['queryset'] = queryset
,但我得到相同的行爲。但是,如果我保存主鍵列表,那很好。
供參考,這是我的中間件的定義:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'johnny.middleware.LocalStoreClearMiddleware',
'johnny.middleware.QueryCacheMiddleware',
)
我使用約翰尼緩存,具有以下配置:
CACHES = {
'default' : dict(
BACKEND='johnny.backends.memcached.MemcachedCache',
LOCATION=['127.0.0.1:11211'],
JOHNNY_CACHE=True,
)
}
JOHNNY_MIDDLEWARE_KEY_PREFIX = 'jc_myproj'