更好的方法来检查Python Django会话中的键?

时间:2015-06-09 14:44:40

标签: python django

虽然这段代码对我有用,但我想知道是否有更好的" Pythonic "在Django会话中检查密钥的方法?

if 'a' \
and 'b' \
and 'c' \
and 'd' \
and 'e' \
and 'f' \
in request.session:
#do something

基本上,我需要确保我的会话中存在所有这些值。

3 个答案:

答案 0 :(得分:5)

使用all内置

if all(key in request.session for key in ['a', 'b', ...]):
   ...

答案 1 :(得分:1)

其他答案中给出的all成语很好,可能是2.x的最佳答案。

如果您使用的是Python 3.x,则替代session.keys()将是支持集合操作的dictview对象。因此,如果您所需的密钥集是静态的,则可以创建frozenset,然后针对session.keys()检查设置差异:

required_keys = frozenset(('a','b','c','d','e','f'))

missing_required_keys = required_keys - session.keys()
if missing_keys:
    # at least one key is missing

MariusSiuram在评论中指出,issubset操作比设置差异更有效,如果您不需要missing_keys集:

if required_keys <= session.keys():
    # do something
else:
    # at least one key is not in the session

如果密钥列表不是静态的,那么与all相比,我没有进行过分析。

答案 2 :(得分:1)

接受解决方案的另一种变体:

if [key for key in ['a', 'b', ...] if key not in request.session ]:
    ...

它起作用,因为空列表的计算结果为False,如果它有多个元素,则计算结果为True编辑以前的版本是错误的。