我正在阅读一些代码,在这里我很困惑:
class PostListView(ListView):
# compressed
def get_context_data(self, **kwargs):
session_key = 'viewed_topic_{}'.format(self.topic.pk) # <-- here
if not self.request.session.get(session_key, False):
self.topic.views += 1
self.topic.save()
self.request.session[session_key] = True # <-- until here
kwargs['topic'] = self.topic
return super().get_context_data(**kwargs)
因此,if
条件将检查是否没有与该键的会话,然后将self.topics.view
加1。
我在这里感到困惑,因为每当用户登录到网站时,他们的会话都会自动创建,除非用户未登录,否则没有会话的机会为零。 (请注意,该项目不允许未经身份验证的用户查看主页,必须登录。)
是否会执行此if
条件?
答案 0 :(得分:1)
if
条件将被执行(预计之前会有异常)。 if
块将根据条件执行。
是否认为条件成立取决于该主题ID的键是否未设置。对于该主题ID,在第一个请求上应该为true,而在同一会话中,以后的任何请求都应该为false。如果其他代码设置了该键或引发了异常,则可能会有所不同。
顺便说一句,您可以使用:
if session_key not in self.request.session:
那也将更具可读性。
答案 1 :(得分:1)
session_key = 'viewed_topic_{}'.format(self.topic.pk)
该行指示发布/主题特定的会话密钥。
if not self.request.session.get(session_key, False):
这一行检查密钥在会话中是否可用。如果不是,只需将密钥添加到会话中。
注意:这不是登录会话密钥。因此,请不要与登录会话密钥混淆。