这种“如果”条件曾经运行过吗?

时间:2019-05-09 06:48:19

标签: python django if-statement

我正在阅读一些代码,在这里我很困惑:

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条件?

2 个答案:

答案 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):这一行检查密钥在会话中是否可用。如果不是,只需将密钥添加到会话中。
注意:这不是登录会话密钥。因此,请不要与登录会话密钥混淆。