본문 바로가기
내일배움캠프

42. 내일배움캠프 - 32일차 TIL

by 새싹_v 2022. 10. 18.
728x90


 

 

TIL

📌
오늘 한 일

좋아요 기능 구현
거북이 반

 

오늘은 내가 맡은 좋아요 기능 구현을 도전했다.

좋아요 기능은 구글링 하면 많이 나와서 장고를 못하는 나도 

구현할 수 있겠구나라고 생각했다.

하지만 내 착각이였다. 

보기에는 쉽지만 팀원분에 도움을 많이 받았다.

거의 팀원분이 해주셨다고 해도 될 거 같다.ㅋㅋㅋ

팀원분이 도와줬다 해도 작성한 코드를 내 것으로 만들 수 있게

어떤 식으로 코드가 진행되는지 열심히 이해를 했다.

다음에 좋아요 부분이 온다면 오늘 작성한 코드를 이용해서 

기능을 구현해봐야겠다!!

 

 

-  좋아요 기능 구현

post/models.py

class Post(models.Model):
   
    like_authors = models.ManyToManyField(User, related_name='like_posts')
    #ManyToManyField를 사용하면 자동으로 두 테이블 사이의 관계를 관리해주는 중간 테이블을 생성해준다.
    #데이터베이스를 확인해보면 _로 이어준 테이블이 생성된 것을 볼 수있음
post/urls.py

urlpatterns = [
    path('post/likes/<int:post_id>/', views.likes, name='post-likes'),
	#post/likes/<int:post_id>/는, post/likes/123과 같이 맨 뒷자리에 숫자가 온다는 얘기고
    #이 숫자는 post_id에 담겨져 views.likes에 전달 된다.
]
post/views.py

@login_required(login_url='user:signin')
def likes(request, post_id):
    if request.method == 'POST': #요청이 post로 왔다면 아래 if문
        post = Post.objects.get(id=post_id)#id값과 post에서 받아온 데이터와 같은 친구를 불러오겠다.
        									#그 친구를 post에 저장
        
    if post.like_authors.filter(id=request.user.id).exists():#post에 id=request.user.id가 있다면 True, 없으면 False로 분기문 탈출
        post.like_authors.remove(request.user) #있다면 remove로 제거
        
    else:
        post.like_authors.add(request.user)	#add로 추가
    return redirect(request.META['HTTP_REFERER'])
post/post/post_detail.html

<form action='{% url 'post:post-likes' post.id %}' method='post'>
                        {% csrf_token %}
                        <div class='post_detail-feed_box-like_bar'>
                            
                            {% if user in post.like_authors.all %} <!--post.like_authors.all에 user가 있다면 아래 if문 돌기-->
                            <div class='post_detail-feed_box-like_wrap'><button class='post_detail-feed_box-like_button'><img src="{% static './assets/like.png'%}"/></button></div>
                            {% else %}
                            <div class='post_detail-feed_box-like_wrap'><button class='post_detail-feed_box-like_button'><img src="{% static './assets/like_empty.png'%}"/></button></div>
                            {% endif %}
                            <div class='post_detaile-feed_box-like_count_text'>좋아요{{post.like_authors.count}}개</div>
                        
                        </div>
                    </form>
728x90

댓글