如何计算Django网站上的访问者数量?

时间:2019-06-07 11:31:22

标签: python django

我如何统计网站上的访问者,以便每次用户访问该网站时访问者都增加。我可以使用以下代码计算访问者的观看次数:

def blog_detail(request, blog_slug):
    blog = get_object_or_404(Blog, slug=blog_slug)
    session_key = 'blog_views_{}'.format(blog.slug)
    if not request.session.get(session_key):
        blog.blog_views += 1  # here
        blog.save()
        request.session[session_key] = True

    context = {
        'blog': blog,
        'categories': get_category_count()
    }

    return render(request, 'blogs/blog-detail.html', context)

在我的模型中有blog_views字段时。我不知道是否有任何类似的方法可以用来计算访问我网站的次数。

有人建议使用hitcount,但除了通用视图之外,我无法在其他任何地方使用它。如果您也建议它,请用一些代码进一步阐述它,谢谢。 非常感谢。

4 个答案:

答案 0 :(得分:1)

您可以为此编写一个middleware class,而不是在每个视图上都添加“计数”逻辑。像这样:

def hitcount_middleware(get_response):

    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        response = get_response(request)

        # Get the URL from the `request` parameter and save it 
        # in a Hitcount model.

        return response

    return middleware

这样做,

  • 您所有的逻辑都在同一个地方(即易于维护),
  • 您的views中的代码会更干净
  • 可以轻松启用/禁用
  • 可以轻松优化(例如,使用Django缓存)。

希望有帮助。

答案 1 :(得分:1)

不确定您的问题是否仍然存在,但很少有项目可以帮助您。 有 Django-visits 计算请求的 url (CounterMiddleware) 或计算对象访问。

from visits.models import Visits

def some_object_view(request, pk):
    some_obj = get_object_or_404(SOME_MODEL, pk=pk)
    Visit.objects.add_object_visit(request, obj=some_obj)

还有一个 django-hitcount 项目,它启用了多个选项来计算页面或对象上的点击次数。

from django.db import models

from hitcount.models import HitCountMixin

# here is an example model with a GenericRelation
class MyModel(models.Model, HitCountMixin):

  # adding a generic relationship makes sorting by Hits possible:
  # MyModel.objects.order_by("hit_count_generic__hits")
  hit_count_generic = GenericRelation(
    HitCount, object_id_field='object_pk',
    related_query_name='hit_count_generic_relation')

# you would access your hit_count like so:
my_model = MyModel.objects.get(pk=1)
my_model.hit_count.hits                 # total number of hits
my_model.hit_count.hits_in_last(days=7) # number of hits in last seven days

答案 2 :(得分:0)

对于上述情况,我的建议是使用google analytics而不是在Django应用中编写逻辑。免费使用Google Analytics(分析)。

答案 3 :(得分:0)

在视图函数和home.html模板页面中添加以下代码

views.py

 def HOME(request):
    "#Number of visits to this view, as counted in the session variable."
    num_visits = request.session.get('num_visits', 0)
    request.session['num_visits'] = num_visits + 1
    context = {'num_visits': num_visits
    }
    return render(request,'home.html',context=context)

home.html

Visitors Count {{ num_visits }}

刷新邮件后,这将在邮件主页上进行计数。