簡體   English   中英

如何計算 Django 網站上的訪問者數量?

[英]How do I count number of visitors on a Django website?

我如何計算我網站上的訪問者,以便每次用戶訪問該網站時它都會增加。 我可以使用以下代碼計算訪問者的瀏覽次數:

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但我不能在通用視圖以外的任何地方使用它。 如果您也提出建議,請用一些代碼進一步詳細說明,謝謝。 非常感謝。

您可以檢查包https://djangopackages.org/grids/g/analytics/

或者

使用谷歌分析而不是在 django 應用程序中編寫邏輯。 谷歌分析可以免費使用。

您可以為此編寫一個 中間件類,而不是在每個視圖上添加“計數”邏輯。 像這樣的東西:

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 緩存)。

希望能幫助到你。

不確定您的問題是否仍然存在,但很少有項目可以幫助您。 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

在視圖函數和 home.html 模板頁面中添加以下代碼

視圖.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)

主頁.html

Visitors Count {{ num_visits }}

這將在郵件主頁刷新時計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM