[Python Django] 3-8. CBV DeleteView를 이용한 게시판 글 삭제 기능 구현

2022. 3. 26. 09:47Python/Django Framework

반응형

views.py에 delete class 추가

  • get을 오버라이드 하지 않는다면 template파일이 필요하며 해당 파일에서 submit 처리가 필요하다
  • post를 오버라이드 하여 작성자와 로그인을 확인한 뒤 delete를 진행한다, 생략한다면 바로 삭제된다
  • delete를 실제 delete가 아닌 상태값을 변화시키는 용도로 변경하려면 delete를 오버라이드 한다
class BoardDeleteView(DeleteView):
    model = Board
    success_url = '/board/list/'
    #template_name = "board_delete.html"

    # template 없이 접근만으로 삭제
    # 생략한다면 template에서 submit을 실행해주어야 한다
    def get(self, request, *args, **kwargs):
        return self.post(request, *args, **kwargs)

    # post에서 삭제 처리 게시물 작성자와 로그인 유저의 id를 비교한 뒤 삭제한다
    # 생략하면 바로 게시물이 삭제된다
    def post(self, request, *args, **kwargs):
        board = Board.objects.get(pk=kwargs.get('pk'))

        if board.insert_user.id != request.session.get('user_id'):
            raise Http404("잘못된 접근입니다")

        return self.delete(request, *args, **kwargs)

urls.py 수정

from django.urls import path

from board.views import BoardCreateView, BoardDetailView, BoardListView, BoardUpdateView, BoardDeleteView

urlpatterns = [
    path('create/', BoardCreateView.as_view()),
    path('update/<int:pk>/', BoardUpdateView.as_view()),
    path('list/', BoardListView.as_view()),
    path('detail/<int:pk>/', BoardDetailView.as_view()),
    path('delete/<int:pk>/', BoardDeleteView.as_view())
]
반응형