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

Как можно считать количество просмотров страницы/кликов по ссылке? Есть проект – блог с постам/публикациями – нужно отображать количество просмотров для введения категория популярные публикации.
  • Вопрос задан
  • 5513 просмотров
Решения вопроса 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, который будет делать то же самое для всех запросов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы