Это условие `если` когда-либо выполняется? - PullRequest
2 голосов
/ 09 мая 2019

Я читаю некоторые коды, и я запутался здесь:

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 на единицу.

Я запутался здесь, потому что всякий раз, когда пользователь входит на сайт, его сеанс будет создаваться автоматически, и у него нет шансов остаться без сеанса, если пользователь не войдет на сайт. (Обратите внимание, что этот проект не позволяет неаутентифицированным пользователям просматривать домашнюю страницу, необходимо войти в систему.) Это if условие когда-либо будет выполнено?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

session_key = 'viewed_topic_{}'.format(self.topic.pk) строка указывает на ключ сеанса, относящийся к конкретному сообщению / теме.
if not self.request.session.get(session_key, False): эта строка проверяет, доступен ли ключ в сеансе.Если не просто добавить ключ в сеанс.
Примечание: Это не ключ сеанса входа в систему.Так что не путайте с ключом сеанса входа в систему.

1 голос
/ 09 мая 2019

Будет выполнено условие if (ожидайте, что ранее было исключение).Блок if будет выполняться в зависимости от условия.

Если условие считается истинным, зависит от того, не установлен ли ключ для этого идентификатора темы .Это должно быть верно для 1-го запроса для этого идентификатора темы и false для любого последующего запроса в том же сеансе.Может быть иначе, если другой код устанавливает этот ключ или возникает исключение.

Кстати, вы можете просто использовать:

if session_key not in self.request.session:

Это также будет более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...