특정 개체/보기 django rest 프레임워크의 고유 보기 수
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 파일의 전체 코드 -->
Reference
이 문제에 관하여(특정 개체/보기 django rest 프레임워크의 고유 보기 수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/siumhossain/unique-view-count-in-specific-objectview-django-rest-framework-27be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)