Django

نمایش تعداد بازدیدکنندگان در سایت جنگویی | روش سوم

در قسمت اول از این آموزش از یک پردازنده زمینه (context_processors) استفاده کردیم در قسمت دوم هم با یک خط کد نویسی توانستیم میزان بازدید ها را با توجه به میزان کلیک دریافت کنیم. اما در این قسمت از آموزش قصد استفاده از پکیج های آماده جنگو را داریم.

Django-Hitcount به شما این امکان را می دهد تعداد بازدیدها (views) را برای یک شی خاص ردیابی کنید. این یک برنامه بازدید کامل یا یک ابزار تحلیلی واقعی نیست. این پکیج فقط یک شمارنده بازدید پایه است.

Hitcounter با شناسایی IP ها از نمایش غیرواقعی جلوگیری می کند بنابراین، بازدیدها برای هر کاربر خاص یک بار حساب می شوند. پروژه جدید جنگو را با نام “وبلاگ” ایجاد کنید و برنامه ای با نام “پست” بسازید.

ابتدا برنامه را نصب کنید.

pip install django-hitcount

سپس django-hitcount در INSTALLED_APPS اضافه کنید برای اینکار به فایل settings.py برنامه اصلی بروید.

settings.py

INSTALLED_APPS = (
    ...
    'hitcount'
)

چندین استراتژی برای استفاده از django-hitcount وجود دارد اما در این آموزش از بهترین روش برای اجرای آن در برنامه ها استفاده خواهیم کرد. پس مدل های خود را ایجاد می کنیم:

models.py

from django.db import models
from hitcount.models import HitCountMixin, HitCount
from django.contrib.contenttypes.fields import GenericRelation
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class Post(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    published = models.DateField(auto_now_add=True)
    slug = models.SlugField(unique=True, max_length=100)
    hit_count_generic = GenericRelation(HitCount, object_id_field='object_pk',
     related_query_name='hit_count_generic_relation')


    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        return super(Post, self).save(*args, **kwargs)

نیاز به کار خاصی بر روی مدل ها نیست django-hitcount برای ایجاد ارتباط با HitCount در مدل شما از GenericForeignKey استفاده می کند. پس مطابق کد های بالا یک ستون در جدول دیتابیس از نوع GenericForeignKey ایجاد میکنیم.

حالا views.py خود را می سازیم.

views.py

from django.shortcuts import render
from django.views.generic.list import ListView
from hitcount.views import HitCountDetailView
from .models import Post

class PostListView(ListView):
    model = Post
    context_object_name = 'posts'
    template_name = 'post_list.html'


class PostDetailView(HitCountDetailView):
    model = Post
    template_name = 'post_detail.html'
    context_object_name = 'post'
    slug_field = 'slug'
    # set to True to count the hit
    count_hit = True

    def get_context_data(self, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        context.update({
        'popular_posts': Post.objects.order_by('-hit_count_generic__hits')[:3],
        })
        return context

از HitCountDetailView می توان برای شمارش بازدیدها با تنظیم count_hit = True استفاده کرد. همچنین می توانیم پربیننده ترین پست ها را همانطور که در بالا نشان داده شده فیلتر کنیم.

نوبت به این میرسد که url های خود را پیکربندی کنیم:

urls.py

from django.contrib import admin
from django.urls import path, include
from posts.views import PostListView, PostDetailView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', PostListView.as_view(), name='posts'),
    path('<slug:slug>/', PostDetailView.as_view(), name='detail'),
    path('hitcount/', include(('hitcount.urls', 'hitcount'), namespace='hitcount')),
]

برای نمایش تعداد کل بازدید ها برای هر کدام از object های مرتبط ، از برچسب الگو get_hit_count استفاده خواهیم کرد.پس به فایل html خود میرویم.

post_list.html

{% extends 'base.html' %}
{% load hitcount_tags %}

{% block content %}
  <h2>Posts List</h2>
  <ul>
    {% for post in posts %}
        <h3 class="mt-5"><a href='{% url "detail" post.slug %}'>{{post.title}}</a></h3>
        <p class="lead">{{post.description}}</p>
        <p>{{post.published}}</p>
        <p>Views: {% get_hit_count for post %}</p>
    {% endfor %}
  </ul>
{% endblock %}

post_detail.html

{% extends 'base.html' %}
{% load hitcount_tags %}

{% block content %}
  <h2>{{post.title}}</h2>
  <ul>
        <p class="lead">{{post.description}}</p>
        <p>Published: {{post.published}}</p>
        <p>Views: {% get_hit_count for post %}</p>
  </ul>

  <h3>Popular Posts</h3>
  {% for p in popular_posts %}
  <p>{{p.title}}</p>
  {% endfor %}
{% endblock %}

امیدوارم که از این آموزش تعداد بازدید کنندگان در جنگو خوشتون اومده باشه برای یادگیری نمایش تعداد بازدیدکنندگان در سایت جنگویی روش دوم بر روی لینک کلیک کنید.

کلمات کلیدی:نمایش تعداد بازدیدکنندگان در سایت جنگویی،تعداد بازدید کنندگان در جنگو،نمایش بازدیدکنندگان در جنگو

امیرحسین باقری

امیرحسین باقری هستم عاشق طراحی سایت در زمینه python و همینطور طراح قالب و متخصص فرانت اند؛ از دانشی که تو این مدت بدست آوردم میشه به: html&css , ,bootstrap, C#, flexbox , sass , javascript , Django,celery,Django channels,DRF,Ruby ,Ruby on Railsاشاره کرد.

دیدگاهتان را بنویسید

همچنین ببینید
بستن
دکمه بازگشت به بالا