У меня есть действие администратора, которое хранит текущий сеанс и класс обработчика (подкласс 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))
Я также пытался хранить QuerySet непосредственно, т.е. 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'