meong_j
기록하는 습관.
meong_j
전체 방문자
오늘
어제
  • 분류 전체보기 (176)
    • 개인 공부 정리 (0)
    • 서버 운영 (37)
      • Linux (36)
    • Frontend (11)
      • Vue.js (10)
    • Backend (70)
      • Java (4)
      • Python (22)
      • Django (38)
      • Spring (6)
    • Database (5)
      • Oracle (4)
      • MySQL (1)
      • MariaDB (0)
    • Android (14)
      • Kotlin (6)
    • 배포 (9)
      • Docker (8)
      • AWS (1)
    • IT_study (29)
      • Coding test (17)
      • 알고리즘 (5)
      • 스터디 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

인기 글

반응형

태그

  • docker
  • SASS Variables
  • DHCP
  • router-link
  • 배포인프라
  • Kotlin
  • 안드로이드adaptor
  • dockersecret
  • 중첩라우트
  • gabagecollecter
  • 이차원배열정렬
  • 리눅스인증
  • Proxy
  • 테크커리어
  • dp #알고리즘
  • 개발자도서
  • django
  • 리눅스방화벽
  • cpu사용률
  • 코틀린자료형

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
meong_j

기록하는 습관.

django 26. Commentapp 마무리
Backend/Django

django 26. Commentapp 마무리

2021. 10. 12. 15:44
728x90
반응형

적용 list 정리

  • comment 작성 후 list 보이게 시각화 추가
  • delete 기능 구현
  • decorator 추가

 

articleapp/detail.html

        <!-- comment detail추가    -->
        {% for comment in target_article.comment.all %}
            {% include 'commentapp/detail.html' with comment=comment %}
        {% endfor %}
  • comment 작성된 내용 보이도록 html에 추가
  • for구문으로 comment개수 만큼 상세 comment detail내용 보이게 추가 

 

detail.html

<div style="border: 1px solid; text-align: left; padding: 4%; margin: 1rem 0; border-radius: 1rem;
  border-color: #bbb;">
  <div>
    <strong>
      {{ comment.writer.profile.nickname }}
    </strong>
    &nbsp;&nbsp;&nbsp;
    {{ comment.created_at }}
  </div>
  <div style="margin : 1rem 0;">
    {{ comment.content }}
  </div>

  {% if comment.writer == user %}
  <div style="text-align: right">
    <a href="{% url 'commentapp:delete' pk=comment.pk %}"
      class="btn btn-danger rounded-pill">
      Delete
    </a>
  </div>
  {% endif %}
</div>
  • comment 상세 detail 페이지
  • 작성자, 작성시간, 내용, delete 버튼 구성
  • 작성자와 로그인한 user가 같을 경우에만 삭제버튼 보이도록 함

 

 

 urls.py

from django.urls import path

from commentapp.views import CommentCreateView, CommentDeleteView

app_name = 'commentapp'

urlpatterns = [
    path('create/', CommentCreateView.as_view(), name='create'),
    path('delete/<int:pk>', CommentDeleteView.as_view(), name='delete'),
]
  • delete url 경로 추가 

 

decorators.py

from django.contrib.auth.models import User
from django.http import HttpResponseForbidden

import articleapp
from articleapp.models import Article
from commentapp.models import Comment


def comment_ownership_required(func):
    def decorated(request, *args, **kwargs):
        comment = Comment.objects.get(pk=kwargs['pk'])
        if not comment.writer == request.user:
            return HttpResponseForbidden()
        return func(request, *args, **kwargs)
    return decorated
  • 댓글 작성자와 request된 user가 같을 경우에만 페이지 보여줌

 

views.py

@method_decorator(comment_ownership_required, 'get')
@method_decorator(comment_ownership_required, 'post')
class CommentDeleteView(DeleteView):
    model = Comment
    context_object_name = 'target_comment'
    template_name = 'commentapp/delete.html'

    def get_success_url(self):
        return reverse('articleapp:detail', kwargs={'pk': self.object.article.pk})
  • user인증 decorator추가
  • 삭제 deleteview 구성 및 삭제 성공 시 articleapp의 detail로 이동

 

delete.html

{% extends 'base.html' %}
{% load bootstrap4 %}

{% block content %}

<div style="text-align:center;  max-width: 500px; margin: 4rem auto">
    <div class="mb-4">
        <h4>Delete Comment : {{ target_comment.content }}</h4>
    </div>
    <form action="{% url 'commentapp:delete' pk=target_comment.pk %}"  method="post">
        {% csrf_token %}
        <input type="submit" class="btn btn-danger rounded-pill col-6 mt-3" >
    </form>
</div>


{% endblock %}
  • 댓글 삭제 버튼 눌렀을 경우 삭제 페이지

 

 

  • 작성된 댓글 detail 페이지

 

 

  • 댓글 삭제페이지
  • 제출 버튼 누르면 삭제 후 detail 페이지로 이동

 

  • 댓글 삭제된 페이지 화면
반응형

'Backend > Django' 카테고리의 다른 글

django 28. MultipleObjectMixin을 통한 ProjectApp 마무리  (0) 2021.10.13
django 27. 모바일 디버깅, 반응형 레이아웃  (0) 2021.10.12
django 25. Mixin 소개 및 Commentapp 구현  (0) 2021.10.12
django 24. ListView, Pagination 소개 및 적용  (0) 2021.10.10
django 23. Articleapp 구현  (0) 2021.10.10
    'Backend/Django' 카테고리의 다른 글
    • django 28. MultipleObjectMixin을 통한 ProjectApp 마무리
    • django 27. 모바일 디버깅, 반응형 레이아웃
    • django 25. Mixin 소개 및 Commentapp 구현
    • django 24. ListView, Pagination 소개 및 적용
    meong_j
    meong_j
    #it #개발일기 #개발공부 #개발자 #백앤드 #생각정리 #시간은 실력에 비례한다 #뭐든지 꾸준히 열심히 #오늘의 내가 내일의 나를 만든다

    티스토리툴바