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)
- 작성 후 포스트맨으로 확인하면 팔로우 하는 사람들의 글들을 확인할 수 있다.
반응형
'DEV > Web 개발' 카테고리의 다른 글
파이썬/머신러닝 웹 프로그래밍 :: 11월 첫째주 WIL #10 (0) | 2022.11.07 |
---|---|
Web 개발 :: Django rest framework, 추천 시스템 _TIL#45 (0) | 2022.11.07 |
Web 개발 :: 파이썬 Django Rest Framework(13) _ 프로필 페이지 (0) | 2022.11.06 |
Web 개발 :: 파이썬 Django Rest Framework(12) _ Serializer 보완(Likes count, Comments count) (0) | 2022.11.05 |
Web 개발 :: 파이썬 Django Rest Framework(11) _ 좋아요, 팔로우 기능 (1) | 2022.11.04 |
댓글