2017-02-19 3 views
-1

私はフラスコ 中のセッションの2モードがあります。1. '管理' 2. '通常の'2セッションは中止フラスコ

このコードは

if 'admin' not in session: 
    abort(404) 

作品...しかし、もしI「または - 2つのセッションを「編集」しました。

if 'admin' or 'normal' not in session: 
    abort(404) 

両方が異常終了します。私はまた、それがまた

答えて

0

使用anyを試してみてくださいを中止

if 'admin' not in session or 'normal' not in session: 
    abort(404) 

を試してみました。あなたの例から

"works" == "doesn't abort" 

"not works" == "aborts" 

ので、::

例1:

if not any(mode in session for mode in ('admin', 'normal')): 
    abort(404) 
0

私は "ない作品" 対 "作品" が意味することを前提とし

If 'admin' not in session: 

これが中止されない場合、「admin not in session」はFalseです。セッション辞書のキー "admin"を探して見つけます。セッションには「admin」というキーがあります。 「not」はこれを打ち消し、中止しません。

例2:ここでは何が起こるか

If 'admin' or 'normal' not in session 

If 'admin' or 'normal' 

でTrueと評価するので、この表現は、実際のセッションで真(ブール値)キーを探します。これが中止されたことを示します。これは、ある時点でTrueキーに値を割り当てていなければならないことを意味します。

これはちょっと奇妙です(違反しません)ので、コードのどこかでロジックに問題があるはずです。

例3:第1項はあるよう

「最初の項を評価することがTrueと評価された場合、その後、第二項を返す他に、それを返す」作品

if 'admin' not in session or 'normal' not in session 

Pythonの論理「または」単に例1(Falseと評価されたと判断した)なので、中止した場合は、第2項をTrueと評価する必要があります。つまり、

'normal' not in session 

がTrueであるため、セッションが中止された場合、セッションには「通常」のキーは存在しないと判断できます。

ここでキーとしてモードを保存すると、複数のモードを同時に適用することができますが、これはおそらくあなたが望むものではありません。

あなたはセッションオブジェクトをセットとして扱っているようですが、基本的には単なるdictです。複数のモードがある場合は、 'mode'という単一のキーの使用を検討し、現在のモードをそのキーの値として保存する必要があります。

+0

Wooowを助け

if session['mode'] == 'admin' ... 

または

if session['mode'] == 'normal' ... 

希望:

は、その後、あなたは次のようにシンプルなロジックを使用することができます。それが本当に私を助けました。 Thaaanks! –

+0

優秀、それは助けてうれしいです。がんばろう。 – gary

+0

ご参考までに - あなたの質問に答えるだけで十分でしたか?もしそうなら、いつでも受け入れることができます... ;-) – gary

関連する問題