문제
나는 누군가가 있는 플러그램(또는 자)에 있는 접근이지만,내가 찾는 데 문제가 있다:내가 원하는 것을 추적할 수 있의 수는"보기"특정 개체에(같은 질문에 여기에서 유래는"볼 수").
는 경우에는 사용자에 기록되지 않,I wouldn't 마음을 시도하는 장소 쿠키(또는 로그 IP)그래서 그들은 할 수 없 실수로 보기에 의해 계산 페이지를 새로 고침;는 경우에는 사용자가 로그에서만 허용들을 하나는"보기"세션에 걸쳐/브라우저/IP 주소가 있습니다.나는 생각하지 않는 그것을 필요로 모든 애호가입니다.
나는 그림을 할 가장 좋은 방법은 이와 미들웨어는 분리에서 다양한 모델하고 싶어 트랙을 사용하 F 식(의 각종)--기타 질문에 stackoverlow 이 언급하는 이(1) (2) (3).
하지만 내가 궁금해하는 경우 이 코드를 존재하는 야생에서 이미이기 때문에 나지 않레이드 코더와 나는 누군가가 그것을 할 수 있는 더 낫습니다.미소입니다.
당신은 그것을 보았는가?
해결책
나는 확실하지 않다면 그것은 최고의 맛을 응답 내 자신의 질문은 그러나,이후 조금의 일을 함께 해결하는 응용 프로그램의 문제를 본격적으로: django-hitcount.
에 대해 읽을 수 있습니다 그것을 사용하는 방법에 문서 페이지.
에 대한 아이디어 django-hitcount 왔에서 온 두 나의 두 가지 원래의 답변(Teebes 고 vikingosegundo),는 정말로 나에 대해 생각하기 시작했습니다.
이것은 나의 첫 번째 시도에서 공유하는 플러그램으로 지역 사회와 희망은 다른 사람이 그것을 발견 유용합니다.감사합니다!
다른 팁
을 사용해야 합니다 django 내장 세션 프레임워크,그것은 이미 많은 이습니다.내가 구현되 이에 다음과 같은 방법으로 Q&A 앱 어디를 추적하고 싶었어망:
에 models.py:
class QuestionView(models.Model):
question = models.ForeignKey(Question, related_name='questionviews')
ip = models.CharField(max_length=40)
session = models.CharField(max_length=40)
created = models.DateTimeField(default=datetime.datetime.now())
에 views.py:
def record_view(request, question_id):
question = get_object_or_404(Question, pk=question_id)
if not QuestionView.objects.filter(
question=question,
session=request.session.session_key):
view = QuestionView(question=question,
ip=request.META['REMOTE_ADDR'],
created=datetime.datetime.now(),
session=request.session.session_key)
view.save()
return HttpResponse(u"%s" % QuestionView.objects.filter(question=question).count())
Vikingosegundo 은 아마도 오른쪽만 사용하는 콘텐츠 유형은 아마 더 재사용할 수 있는 솔루션이지만 확실히 하지 않 바퀴를 재발견의 관점에서 추적하는 세션,장고가!
마지막 것은,당신은 아마이 있기를 기록하는중 하나라고 Ajax 를 통해 또 css 도록 링크를 검색 엔진하지 않는 회전하는 계산합니다.
도움이 됐으면 좋겠어!
을 만들 수 있습니다 일반적인 모델 Hit
class Hit(models.Model):
date = models.DateTimeField(auto_now=True)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
에 view.py 당신이 쓰기 기능:
def render_to_response_hit_count(request,template_path,keys,response):
for key in keys:
for i in response[key]:
Hit(content_object=i).save()
return render_to_response(template_path, response)
와 전망에 관심이 있는 반환
return render_to_response_hit_count(request, 'map/list.html',['list',],
{
'list': l,
})
이 방법을 제공할 능력,하지만 계산하는 히트,하지만 필터의 역사에 의해 시간,contenttype 다.
로 히트-테이블 수도 빠르게 성장하고,당신은 당신에 대해 생각해야 삭제 전략입니다.
이 질문은 하나도 thornomad 가 문제를 해결하기 위해 응용 프로그램과 저에게 영감을 나와 함께 솔루션입니다.공유하고 싶 이 솔루션 이후까지 많은 정보에 대해 이제는 데 도움이 될 수 있습니다 다른 사람.나의 접근 방식은 일반적인 모델을 사용할 수 있으로 어떤 보기 뷰에 따라 경로(url).
models.py
class UrlHit(models.Model):
url = models.URLField()
hits = models.PositiveIntegerField(default=0)
def __str__(self):
return str(self.url)
def increase(self):
self.hits += 1
self.save()
class HitCount(models.Model):
url_hit = models.ForeignKey(UrlHit, editable=False, on_delete=models.CASCADE)
ip = models.CharField(max_length=40)
session = models.CharField(max_length=40)
date = models.DateTimeField(auto_now=True)
views.py
def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
def hit_count(request):
if not request.session.session_key:
request.session.save()
s_key = request.session.session_key
ip = get_client_ip(request)
url, url_created = UrlHit.objects.get_or_create(url=request.path)
if url_created:
track, created = HitCount.objects.get_or_create(url_hit=url, ip=ip, session=s_key)
if created:
url.increase()
request.session[ip] = ip
request.session[request.path] = request.path
else:
if ip and request.path not in request.session:
track, created = HitCount.objects.get_or_create(url_hit=url, ip=ip, session=s_key)
if created:
url.increase()
request.session[ip] = ip
request.session[request.path] = request.path
return url.hits
나는 그것 쿠키를 사용합니다.알지 못하는 경우에는 그것의 좋은 아이디어를 하는 것 또는 없습니다.다음 코드는 이미 설정된 쿠키가 첫 번째 존재하는 경우 그 증가 total_view 반대하지 않는 경우가 증가 모두 total_views 및 unique_views.모두 total_views 및 unique_views 분야의 Django 모델입니다.
def view(request):
...
cookie_state = request.COOKIES.get('viewed_post_%s' % post_name_slug)
response = render_to_response('community/post.html',context_instance=RequestContext(request, context_dict))
if cookie_state:
Post.objects.filter(id=post.id).update(total_views=F('total_views') + 1)
else:
Post.objects.filter(id=post.id).update(unique_views=F('unique_views') + 1)
Post.objects.filter(id=post.id).update(total_views=F('total_views') + 1)
response.set_cookie('viewed_post_%s' % post_name_slug , True, max_age=2678400)
return response
나는 이것에 의해 모델을 만들기 페이지뷰를 만들고 열"Hits"습니다.때마다 Homepage url 이다.내가 증가 첫 번째만의 행 열중하고 렌더링이 그것의 이름을 입력합니다.여기에는 방법입니다.
Views.py
def Home(request):
if(PageView.objects.count()<=0):
x=PageView.objects.create()
x.save()
else:
x=PageView.objects.all()[0]
x.hits=x.hits+1
x.save()
context={'page':x.hits}
return render(request,'home.html',context=context)
Models.py
class PageView(models.Model):
hits=models.IntegerField(default=0)