我如何统计网站上的访问者,以便每次用户访问该网站时访问者都增加。我可以使用以下代码计算访问者的观看次数:
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
,但除了通用视图之外,我无法在其他任何地方使用它。如果您也建议它,请用一些代码进一步阐述它,谢谢。
非常感谢。
答案 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
中的代码会更干净希望有帮助。
答案 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模板页面中添加以下代码
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)
Visitors Count {{ num_visits }}
刷新邮件后,这将在邮件主页上进行计数。