5

現在の選択内容とハンドラー クラス (のサブクラスobject) をセッションに保存し、選択内容を処理する別のページにリダイレクトする管理アクションがあります。ただし、何らかの理由で、これを行うたびに、セッション全体が失われます。

実際に起こることは、ビュー関数の呼び出し中に、セッションにキー「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',
)

次の構成で Johnny Cache を使用しています。

CACHES = {
    'default' : dict(
        BACKEND='johnny.backends.memcached.MemcachedCache',
        LOCATION=['127.0.0.1:11211'],
        JOHNNY_CACHE=True,
    )
}
JOHNNY_MIDDLEWARE_KEY_PREFIX = 'jc_myproj'
4

1 に答える 1