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

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

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

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

장고가좋아요 1244

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 오후

@hidden5542님 세번째 블록은 질문 상세 페이지 호출에 해당되는 함수입니다. - 박응용님, 2021년 9월 23일 8:01 오후 추천 , 대댓글
@박응용님 감사합니다. 제가 장고를 처음 하는거라서 이해를 잘못하겠더라고요. 제 생각에는 게시물리스트에서 제목을 클릭하면 조회수를 올리는 세번째블럭을 실행해야될것같은데요. 그럼 게시물리스트를 불러오는 question_detail.html에서 3번째블록을 이용하는건가요? - hidden5542님, 2021년 9월 24일 7:55 오전 추천 , 대댓글
@hidden5542님 3번째 블록은 base_views.py 파일의 detail 함수입니다. - 박응용님, 2021년 9월 24일 12:24 오후 추천 , 대댓글
@박응용님 감사합니다. - hidden5542님, 2021년 9월 25일 7:39 오전 추천 , 대댓글
@박응용님 3번째블록의 view_count는 Questions 모델 클래스의 모델중 하나인가요? 혹시 모델 블록 구현하신거 보여주실 수 있으신지요. 그리고 이걸 리스트 html 에서 구현하려면 {{question.view_count}}를 넣어줘야 하나요... - dongsoon님, 2022년 8월 22일 12:35 오후 추천 , 대댓글