3-16 추가기능 개발 중 조회수 기능 추가관련

django-hitcount 를 사용하려고 보니 detail 에서만 사용이 가능하고 pybo 사이트처럼 list를 뿌릴때는 사용을 할 수 없는 거 같아서요

다른 질문글들을 찾아보니
question_views.py에서 아래와 같이 자체적으로 만든 get_client_ip를 호출해서 사용하는 것 같은데 해당 부분은 어떻게 구성되어 있을까요?
"from tools.utils import get_client_ip"

추가 기능들을 붙이는데 시간이 너무 오래걸리네요 ㅠㅠ

장고가좋아요 24

M 2021년 9월 15일 6:24 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

파이보는 조회수의 무차별 증가를 막기위해 아이피당 1개만 조회수를 허용하도록 모델링했습니다.
그때 사용하는 것이 get_client_ip 이구요.

코드는 다음과 같습니다.

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[-1].strip()
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

그리고 조회수를 올릴지 판별하는 모델은 다음과 같습니다.

class QuestionCount(models.Model):
    ip = models.CharField(max_length=30)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)

    def __unicode__(self):
        return self.ip

그리고 view에서는 다음과 같이 체크하여 조회수를 올립니다.

    # 조회수
    ip = get_client_ip(request)
    cnt = QuestionCount.objects.filter(ip=ip, question=question).count()
    if cnt == 0:
        qc = QuestionCount(ip=ip, question=question)
        qc.save()
        if question.view_count:
            question.view_count += 1
        else:
            question.view_count = 1
        question.save()

박응용

2021년 9월 15일 6:11 오후