Точное число просмотров страницы в Django

Что такое хороший подход к постоянному подсчету того, сколько раз просматривалась страница?

Я использую Django. В частности, я не хочу обновлять страницу для подсчета.

Ответ 1

Насколько мне известно, ни один браузер на данный момент не посылает на сервер никакого сообщения/заголовка о том, был ли запрос обновлен или нет.

Единственный способ увидеть, что пользователь не обновляет страницу, - это отслеживать IP-адреса и время, которое пользователь просматривает на странице, а затем, если пользователь просматривал страницу менее 30 минут назад, скажем, вы бы отпустите его как обновление и не увеличивайте количество просмотров страницы.

В большинстве случаев обновления IMO чаще всего рассматриваются как просмотр страниц, так как единственная причина, по которой я могу освежиться, - увидеть новые данные, которые могли бы быть добавлены, или случайное обновление/перезагрузку после сбоя браузера (что выше метод отклоняется).

Ответ 2

Вы можете предоставить каждому пользователю cookie, срок действия которого истекает в конце дня, содержащий уникальный номер. Если он перезагрузит страницу, вы можете проверить, есть ли она уже в тот день.

Ответ 3

Вы можете создать таблицу с уникальными посетителями страниц, например. VisitorIP + X-Forwarded-For content, строка User-Agent вместе с идентификатором PageID. Если сами данные неактуальны, вы можете создать хэш-код md5/sha1 из этих значений (помимо, конечно, и страницы). Однако следует предупредить, что эта таблица будет расти очень быстро.

Я бы посоветовал не устанавливать файлы cookie для этой цели. Они имеют ограниченный размер и со многими посещенными страницами пользователя, вы можете достичь этого предела и сделать решение ненадежным. Кроме того, это затрудняет кэширование такой страницы на стороне клиента (см. Cacheability), так как это становится интерактивным контентом.

Ответ 4

Вы можете написать промежуточное программное обеспечение django и catch request.url, а затем настроить таблицу с URL-адресами/доступами. Остерегайтесь транзакций для одновременного обновления. Если у вас возникли проблемы с загрузкой, вы можете использовать memcached с функцией incr или add и периодически обновлять таблицу базы данных, чтобы избежать блокировок транзакций.