Python 烧瓶2会话中止
我在Flask中有2种会话模式 1. '管理员 2. '正常的 此代码Python 烧瓶2会话中止,python,flask,Python,Flask,我在Flask中有2种会话模式 1. '管理员 2. '正常的 此代码 if 'admin' not in session: abort(404) 工作。。。但是,如果我“或教唆”了这两个课程: if 'admin' or 'normal' not in session: abort(404) 两个都中止。我也试过了 if 'admin' not in session or 'normal' not in session: abort(404) 它也会中止尝试使用任
if 'admin' not in session:
abort(404)
工作。。。但是,如果我“或教唆”了这两个课程:
if 'admin' or 'normal' not in session:
abort(404)
两个都中止。我也试过了
if 'admin' not in session or 'normal' not in session:
abort(404)
它也会中止尝试使用
任何
if not any(mode in session for mode in ('admin', 'normal')):
abort(404)
我假设“有效”与“不有效”是指:
及
因此,从您的示例中:
例1:
If 'admin' not in session:
如果此操作未中止,则“管理员不在会话中”为False。它在会话字典中查找密钥“admin”,并找到它。会话中有一个名为“admin”的密钥。“not”否定了这一点,因此您不会中止
例2:
If 'admin' or 'normal' not in session
这里发生的是
If 'admin' or 'normal'
计算结果为True,因此此表达式实际上在会话中查找True(布尔)键。您指出这将中止,这意味着您必须在某个时候为True键指定一个值
这有点奇怪(无意冒犯),所以代码中的某些地方一定存在逻辑问题
例3:
if 'admin' not in session or 'normal' not in session
Python的逻辑“or”类似于“计算第一个术语,如果计算结果为True,则返回它,否则返回第二个术语”
第一个术语只是示例1(我们确定它的计算结果为False),因此如果它中止,则第二个术语的计算结果必须为True。换句话说,
'normal' not in session
为True,因此,如果它被中止,则可以断定会话中没有键“正常”
现在,将模式存储为键将允许同时应用多个模式,这可能不是您想要的
你把会话对象看作一个集合,但它基本上只是一个DICT。如果你有多个模式,你应该考虑使用一个称为“模式”的键,然后将当前模式存储为该键的值。
然后您可以使用简单的逻辑,如:if session['mode'] == 'admin'
...
或
希望这有帮助。这真的帮助了我。Thaaanks!太好了,很高兴这有帮助。祝你好运。顺便问一下,这对回答你的问题有帮助吗?如果是这样,您可以随时接受…;-)
'normal' not in session
if session['mode'] == 'admin'
...
if session['mode'] == 'normal'
...