Простой и эффективный способ подсчета просмотров страницы на django?

Как можно считать количество просмотров страницы/кликов по ссылке? Есть проект – блог с постам/публикациями – нужно отображать количество просмотров для введения категория популярные публикации.
  • Вопрос задан
  • 5642 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Я бы сделал так:

models.py
class PageHit(models.Model):
    url = models.CharField(unique=True)
    count = models.PositiveIntegerField(default=0)

decorators.py
from functools import wraps
from django.db.models import F
from django.db import transaction

def counted(f):
    @wraps(f)
    def decorator(request, *args, **kwargs):
        with transaction.atomic():
            counter, created = PageHit.objects.get_or_create(url=request.path)
            counter.count = F('count') + 1
            counter.save()
        return f(request, *args, **kwargs)
    return decorator

views.py
from .decorators import counted

@counted
def some_view(request):
    ...

Репозиторий демонстрационного проекта.

Или можно написать middleware, который будет делать то же самое для всех запросов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы