Отследить количество “просмотров страницы” или “хиты” объекта?

Может быть

import codecs
zf = gzip.open(fname, 'rb')
reader = codecs.getreader("utf-8")
contents = reader( zf )
for line in contents:
    pass
36
задан Community 23 May 2017 в 12:25
поделиться

3 ответа

Я не уверен, что мне лучше всего ответить на мой вопрос, но после небольшой работы я собрал приложение, которое серьезно решает проблемы: django- hitcount .

Вы можете прочитать о том, как его использовать на странице документации .

Идеи для django-hitcount пришли из обоих моих двух исходных ответов ( Teebes -and- vikingosegundo ), что действительно заставило меня задуматься обо всем этом.

Это моя первая попытка поделиться подключаемым приложением с сообществом и надеюсь, что кто-то другой сочтет его полезным. Спасибо!

48
ответ дан 27 November 2019 в 05:28
поделиться

Вам следует используйте встроенный фреймворк сеанса django, он уже многое из этого делает за вас. Я реализовал это следующим образом с помощью приложения Q&A, в котором я хотел отслеживать просмотры:

in models.py:[1254ptingin views.py:

def record_view(request, question_id):

    question = get_object_or_404(Question, pk=question_id)

    if not QuestionView.objects.filter(
                    question=question,
                    session=request.session.session_key):
        view = QuestionView(question=question,
                            ip=request.META['REMOTE_ADDR'],
                            created=datetime.datetime.now(),
                            session=request.session.session_key)
        view.save()

    return HttpResponse(u"%s" % QuestionView.objects.filter(question=question).count())

Vikingosegundo, вероятно, прав, хотя использование content-type, вероятно, более многоразовое решение, но определенно не изобретайте колесо с точки зрения сеансов отслеживания, Django уже делает это!

И последнее, у вас, вероятно, должно быть представление, записывающее попадание, которое вызывается либо через Ajax, либо через ссылку css, чтобы поиск двигатели не увеличивают ваши счета.

Надеюсь, это поможет!

23
ответ дан 27 November 2019 в 05:28
поделиться

Вы можете создать общую модель Hit

class Hit(models.Model):
    date = models.DateTimeField(auto_now=True)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

в вашем view.py, вы напишите эту функцию:

def render_to_response_hit_count(request,template_path,keys,response):
    for  key in keys:
        for i in response[key]:
             Hit(content_object=i).save()
    return render_to_response(template_path, response)

и представления, которые вас интересуют return

return render_to_response_hit_count(request,   'map/list.html',['list',],
        {
            'list': l,
        })

Этот подход дает вам возможность не только для подсчета попаданий, но и для фильтрации истории попаданий по времени, типу содержимого и так далее ...

Поскольку таблица совпадений может быстро расти, вам следует подумать о стратегии удаления.

11
ответ дан 27 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

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