2

セッションに何かがあるかどうかを確認しようとしています。私がしたことは次のとおりです。

if request.session: 
   # do something

しかし、それは機能していません。その時点でセッションに何かが含まれているかどうかを知る方法はありますか?

そうすればrequest.session['some_name']機能しますが、場合によっては、セッションが空かどうかを知る必要があります。

いくつかの特定の名前で尋ねることは、必ずしも望まれることではありません。例えば。セッションがない場合は、some_name存在しないため、エラーが返されます。

4

2 に答える 2

7

request.session辞書のように動作するオブジェクトのインスタンスですがSessionBase、辞書ではありません。_sessionこのオブジェクトには、すべてのデータを保持する辞書と呼ばれる「プライベート」フィールド (実際にはプロパティ)があります。

その理由は、Django が を呼び出すまでセッションをロードしないためですrequest.session[key]。遅延インスタンス化されます。

だからあなたはそれを試すことができます:

if request.session._session:
    # do something

または、次のようなキーを見て実行できます。

if request.session.keys():
    # do something

仕組みに注意してください.keys()

ジャンゴ/contrib/セッション/バックエンド/base.py

class SessionBase(object):
    # some code

    def keys(self):
        return self._session.keys()

    # some code

ソースコードを直接読むことを常にお勧めします。

于 2013-03-11T07:36:34.243 に答える