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>
{{ 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 |