문제

나는 누군가가 있는 플러그램(또는 자)에 있는 접근이지만,내가 찾는 데 문제가 있다:내가 원하는 것을 추적할 수 있의 수는"보기"특정 개체에(같은 질문에 여기에서 유래는"볼 수").

는 경우에는 사용자에 기록되지 않,I wouldn't 마음을 시도하는 장소 쿠키(또는 로그 IP)그래서 그들은 할 수 없 실수로 보기에 의해 계산 페이지를 새로 고침;는 경우에는 사용자가 로그에서만 허용들을 하나는"보기"세션에 걸쳐/브라우저/IP 주소가 있습니다.나는 생각하지 않는 그것을 필요로 모든 애호가입니다.

나는 그림을 할 가장 좋은 방법은 이와 미들웨어는 분리에서 다양한 모델하고 싶어 트랙을 사용하 F 식(의 각종)--기타 질문에 stackoverlow 이 언급하는 이(1) (2) (3).

하지만 내가 궁금해하는 경우 이 코드를 존재하는 야생에서 이미이기 때문에 나지 않레이드 코더와 나는 누군가가 그것을 할 수 있는 더 낫습니다.미소입니다.

당신은 그것을 보았는가?

도움이 되었습니까?

해결책

나는 확실하지 않다면 그것은 최고의 맛을 응답 내 자신의 질문은 그러나,이후 조금의 일을 함께 해결하는 응용 프로그램의 문제를 본격적으로: django-hitcount.

에 대해 읽을 수 있습니다 그것을 사용하는 방법에 문서 페이지.

에 대한 아이디어 django-hitcount 왔에서 온 두 나의 두 가지 원래의 답변(Teebesvikingosegundo),는 정말로 나에 대해 생각하기 시작했습니다.

이것은 나의 첫 번째 시도에서 공유하는 플러그램으로 지역 사회와 희망은 다른 사람이 그것을 발견 유용합니다.감사합니다!

다른 팁

을 사용해야 합니다 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top