특정 개체/보기 django rest 프레임워크의 고유 보기 수

먼저 다음과 같이 모든 IP 주소를 저장하기 위한 데이터 테이블을 만들어야 합니다.

class IpAddress(models.Model):
    ip = models.CharField(max_length=255)

    def __str__(self):
        return self.ip


그런 다음 특정 개체 또는 보기(블로그, 기사, 게시물 등) 옆에 고유한 모든 IP 주소를 저장해야 합니다.

views = models.ManyToManyField(IpAddress,blank=True)




그런 다음 함수에 요청을 전달하여 IP 주소를 추출하고 이 IP 주소를 특정 개체 또는 뷰에 저장해야 합니다.

다음은 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


이제 특정 보기에서 요청을 전달하고 추출된 IP 주소가 데이터베이스 테이블에 이미 존재하는지 확인합니다. 존재하는 경우 이 내부 보기 필드를 저장하거나 추출된 IP 주소가 이전 데이터 세트와 일치하지 않는 경우 -> 새 IP 주소를 IP 주소 테이블에 저장하고 이를 내부 보기 필드와 함께 저장합니다.

 @swagger_auto_schema(tags=['Get a single news'],methods=['get'])
@api_view(['GET'])
def getSingleNews(request,title):
    try:
        obj = News.objects.get(title=title)
    except News.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        ip = get_client_ip(request)
        if IpAddress.objects.filter(ip=ip).exists():
            obj.views.add(IpAddress.objects.get(ip=ip))
        else:
            IpAddress.objects.create(ip=ip)
            obj.views.add(IpAddress.objects.get(ip=ip))
        serializer = NewsSerializer(obj)
        return Response(serializer.data,status=status.HTTP_200_OK)


이제 직렬 변환기 내부에 메서드를 선언하고 원하는 조회 수를 전달할 수 있습니다.
serializers.py에서

views = serializers.SerializerMethodField()
def get_views(self,obj):
        count = obj.views.count()
        return count



seralizers.py 파일의 전체 코드 -->

좋은 웹페이지 즐겨찾기