[TIL #20] 장고 팀프로젝트 #3

안떽왕·2023년 4월 13일
0

Today I Learned

목록 보기
20/76

유저와 관련된 기능은 구현이 되었고 팀원들이 구현한 게시물 작성과 팔로우 기능도 구현이 되었습니다.

이번 팀 프로젝트 발제에서 필수적으로 요구했던 내용이 다 구현되었으나 이번 과제가 널널한 탓인지 이번 팀이 너무도 강력한 탓인지 마감기한까지 너무 많이 남았습니다.

그래서 각자 구현하고 싶은 것 혹인 발제에서 제시해준 선택사항들을 하나하나 해나가기로 했습니다.

팔로우 리스트

메인 페이지에 게시물들만 덩그러니 놓여져 있는게 아쉬워 페이지 왼쪽에 있는 div 덩어리에 리스트를 만들어 보고자 했습니다.

리스트에는 팔로우한 사람의 이름이 노출되고 그 이름을 클릭하면 해당 인물의 마이페이지로 이동하게 만드는 것이 목표였습니다.

<div class="card-body">
                    <h5 class="card-title">팔로우 리스트</h5>
                    <ul class="list-group list-group-flush">
                        {% for follower in user.follower.all %}
                            <li class="list-group-item">
                                <a href="{% url 'my_page' follower.id %}" style="text-decoration-line: none;">
                                    <img
                                        src="{{ follower.imgfile.url }}"
                                        class="rounded-circle"
                                        width="50"
                                        height="50"
                                    >
                                    {{ follower.username }}
                                </a>
                            </li>
                        {% endfor %}
                    </ul>
                </div>

함수를 만들지도 않았고 그냥 html파일에 맞는 장소에 원래 정해져있던 div 클래스들을 사용해 만들었습니다. 애초에 형식이 정해진 상태로 작업을 하다보니 너무도 금방 만들어졌습니다.

이 코드를 만들고 있는 사이에 프로필 이미지를 업로드하는 기능이 추가가 되었습니다. 이에 단순히 이름만 나오는데 그치지 않고 이름 옆에 사진을 띄워주는 코드도 함께 작성하게 되었습니다.

팔로우 게시글 페이지

기본 피드에는 사람들이 작성한 모든 글들이 최근 생성순으로 정렬되어 있습니다. 팔로우 기능을 구현한 만큼 팔로우한 사람들의 글만 볼 수 있으면 좋겠다는 생각이 들어 구현하게 되었습니다.

저는 user앱을 담당하고 있어서 주로 user폴더에서만 작업을 했지만 이번 작업은 게시글 페이지와 관련이 있어 url은 tweet 폴더에서 하기로 했습니다.

from user.views import follow_tweet_view

urlpatterns = [
	path('tweet/followers', follow_tweet_view, name='followers'),
]

user폴더의 views파일에서 해당 함수만 가져와 url을 만들었습니다.

@login_required(login_url='/user/login')
def follow_tweet_view(request):
    login_user = request.user
    follow_users = login_user.follower.all()
    follow_users_ids = [user.id for user in follow_users]
    follow_tweet = TweetModel.objects.filter(
        user_id__in=follow_users_ids)  # __in :
    all_follow_tweet = follow_tweet.order_by('-created_at')
    return render(request, 'tweet/follows_tweet.html', {'all_follow_tweet': all_follow_tweet})

로그인한 사용자만이 접근할 수 있도록 데코레이터를 달아놓았습니다. 내가 팔로우한 사람들의 정보를 담고있는 follow_usersfor문을 돌려 user_id만을 추출하고 follow_tweet을 선언하는 곳을 보면 __ 이 기호가 쓰여진 것을 볼 수 있는데 이는 장고 ORM에서 사용되는 연산자로 객체의 속성에 접근하고 조건을 지정해 게시글 목록중에서 id값이 일치하는 게시글만 가져올 수 있습니다.

profile
이제 막 개발 배우는 코린이

0개의 댓글