본문 바로가기
DEV/Web 개발

Web 개발 :: 파이썬 Django Rest Framework(14) _ 피드

by 올커 2022. 11. 7.

 

DRF(Django Rest Framework)(14) _ 피드

01. 프로필 페이지

 - 이제 유저가 팔로우하고 있는 사람들의 글들을 볼 수 있는 Feed 화면을 생성해본다. 먼저 urls.py에 사용할 url과 view를 연결해준다.

# articles/urls.py

urlpatterns = [
    ...
    path('feed/', views.FeedView.as_view(), name='feed_view'),
    ...
]

 - Feed는 로그인 되어있을 때 보여주기 위해 permission_classes를 추가해주었다.

 - 그리고 for문을 이용해서 사용자가 following하고 있는 사람들을 차례로 돌 것이다. 이 때 사용되는 것이 Q objects인데 참고 링크를 확인해본다. (※ 참고 링크)

 Q object는 아래와 같이 Q라는 object를 만들고 쿼리에 내부에 조건들을 and, or를 사용하여 넣어줄 수 있다.

from django.db.models.query_utils import Q

class UserView(APIView)
    def get(self, request):
        # 취미 중 산책이 있거나 나이가 19살보다 많고 김씨인 사람만 필터 사람만 필터
        query = Q(hobby__name="산책") | Q(age__gt=19, user__name__startswith="김")

        # 취미 중 산책이 있으면서 나이가 19살보다 많은 사람만 필터
        query = Q(hobby__name="산책") & Q(age__gt=19)				
        user_profile_list = UserProfileModel.objects.filter(query)

 - 이러한 Q의 성격을 활용하여 아래와 같이 FeedView를 작성할 수 있다.

# articles/views.py

from django.db.models import Q

class FeedView(APIView):
    permission_classes = [permissions.IsAuthenticated]
    def get(self, request):
        q = Q()
        for user in request.user.followings.all():
            q.add(Q(user=user),q.OR)
        feeds = Article.objects.filter(q)
        serializer = ArticleListSerializer(feeds, many=True)
        return Response(serializer.data)

 - 작성 후 포스트맨으로 확인하면 팔로우 하는 사람들의 글들을 확인할 수 있다.

 

 

 

 

반응형

댓글