我有一个观点,就是简单地检查会话存储中的密钥,如果它存在,它将删除它,如果它不存在,则应该通过,可能值得注意的是,密钥存储持有模型实例的ID。
def RefreshInstances(request):
if request.session['instances']:
del request.session['instances']
else:
pass
return redirect('/')
这有效并达到删除实例的目的,但是,如果密钥存储区为空,我会得到一个密钥错误,而不是刚刚传递的代码?
有人可以照亮吗?
谢谢。
答案 0 :(得分:3)
可以将其压缩为一行:
request.session.pop('instances', None)
答案 1 :(得分:3)
访问不存在的字典(或类似字典)的键会引发KeyError
。
您可以显式检查密钥:
if 'instances' in request.session:
# ...
或者您可以使用.get()
方法,如果该键不存在,该方法将返回默认值(默认为None
),这也很方便,因为伪造的值(例如0,'',错误,[]等通过测试:
if request.session.get('instances'):
del request.session['instances']
...但要删除,只需将.pop()
设置为默认值且不使用if:
request.session.pop('instances', None) # Remove `instances` if it's there, do nothing otherwise.
答案 2 :(得分:2)
如果使用request.session['instances']
,则执行查找。如果键(此处为'instances'
)不可用,它将引发一个KeyError
。因此,在{em>之前会通过if
语句评估表达式的真实性。
不过最好在这里使用.pop(..)
request.session.pop('instances', None)
这将删除密钥(如果有),否则不执行任何操作。如果存在该值,它将返回与'instances'
键关联的值,否则返回None
。