Django의 특정 객체에 대한 적중/조회 수를 추적하는 방법 | Django 패키지 시리즈 #2
DEV는 어떻게 되나요?
Django 패키지 시리즈의 두 번째 게시물에 오신 것을 환영합니다. 이 빠른 자습서에서는 특정 개체에 대한 보기/적중 횟수를 추적하는 방법을 배웁니다.
추적은 정말 유용한 기능입니다. 사용자가 애플리케이션을 입력하면 조회수를 통해 사용자가 특정 게시물을 클릭하고 읽을 수 있습니다. 또한 사용자에게 가장 인기있는 게시물을 표시하는 것이 좋습니다.
이 주제와 관련된 인터넷에서 몇 가지 솔루션을 보았습니다. 조회수를 처리하기 위해 F() 표현식을 사용하는 일부 개발자:
Post.objects.filter(pk=post.pk).update(views=F('views') + 1)
나쁜 접근!
F()를 사용하고 사용자가 객체를 클릭할 때마다 뷰를 업데이트하는 것은 뷰 카운터를 생성하는 좋은 솔루션이 아닙니다. 따라서 클릭수를 제대로 계산하지 못하고 동일한 사용자가 동일한 게시물을 클릭할 때마다 조회수가 증가합니다.
django-hitcount를 소개하겠습니다. Django-Hitcount를 사용하면 특정 개체에 대한 적중(보기) 수를 추적할 수 있습니다. 이것은 본격적인 추적 응용 프로그램이나 실제 분석 도구가 아닙니다. 그것은 단지 기본적인 히트 카운터입니다.
Hitcounter는 IP를 감지하고 비현실적인 보기를 방지합니다. 따라서 조회수는 각 특정 사용자에 대해 한 번씩 계산됩니다.
"blog"라는 새 Django 프로젝트를 만들고 "posts"라는 앱을 만듭니다. 그런 다음 다음 명령을 실행하여 패키지를 설치합니다.
pip3 install django-hitcount
INSTALLED_APPS에 django-hitcount를 추가합니다.
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에 의존합니다.
그런 다음 뷰를 생성해 보겠습니다.
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')),
]
관련 개체에 대한 총 조회수를 표시하기 위해 get_hit_count 템플릿 태그를 사용합니다.
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 %}
내 GitHub에서 프로젝트를 다운로드하거나 복제할 수 있습니다.
파일롯 / Django-히트 카운트-튜토리얼
django-hitcount 패키지를 사용하는 간단한 블로그 앱
Django-히트 카운트-튜토리얼
django-hitcount 패키지를 사용하는 간단한 블로그 앱
시작하다
다음 commad를 사용하여 종속성을 설치합니다.pip3 install requirements.txt
그리고 프로젝트를 실행python3 manage.py makemigrations posts
python3 manage.py migrate
python3 manage.py runserver
View on GitHub
그게 다야! 소셜 미디어에서 저를 팔로우하고 있는지 확인하고 이와 같은 튜토리얼을 더 업로드할 수 있도록 buying me a coffee☕로 저를 지원해 주세요. 다음 포스트 DEV에서 만나요!
Reverse Python
Reference
이 문제에 관하여(Django의 특정 객체에 대한 적중/조회 수를 추적하는 방법 | Django 패키지 시리즈 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/thepylot/how-to-track-number-of-hits-views-for-chosen-objects-in-django-django-packages-series-2-3bcb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pip3 install requirements.txt
python3 manage.py makemigrations posts
python3 manage.py migrate
python3 manage.py runserver
Reference
이 문제에 관하여(Django의 특정 객체에 대한 적중/조회 수를 추적하는 방법 | Django 패키지 시리즈 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thepylot/how-to-track-number-of-hits-views-for-chosen-objects-in-django-django-packages-series-2-3bcb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)