from django.urls import path
from postings.views import PostingView, PostingUpdateView
urlpatterns = [
path('post', PostingView.as_view()),
path('delete/<int:id>',PostingView.as_view()),
path('post/<int:id>' ,PostingUpdateView.as_view())
]
from django.urls import path
from comments.views import (
CommentsGetView,
CommentsPostView,
)
urlpatterns = [
path('post', CommentsPostView.as_view()),
path('get/<int:id>', CommentsGetView.as_view()), #id는 post의 id 기준으로 잡아야 함
path('delete/<int:id>', CommentsGetView.as_view()),
]
url을 설정할 때 delete 뒤에 <int:id> 라고 써놓은 게 있다.
문제에서 body를 안 받는다고 한 것과 연결되는 데 삭제의 경우
다른 데이터를 받을 게 없이, id가 몇 번인 것만 삭제한다고 요청하면 돼서
뒤에 id를 붙이게 된 것이다.
이게 바로 그 rest api? 라고 한다. (이거는 나도 자세하게는 잘 몰라서 공부해야 함)
@login_decorator
def delete(self, request, id) :
try :
posting_id = id
if not Posting.objects.filter(id=posting_id).exists() :
return JsonResponse({'message':'Posting is not existed'}, status=400)
except KeyError :
return JsonResponse({'message':'KEY_ERROR'}, status=400)
Posting.objects.filter(id=posting_id).delete()
return JsonResponse({'message':'delete ok'}, status=200)
@login_decorator
def delete(self, request, id) :
try :
comment_id = id
if not Comment.objects.filter(id=comment_id).exists() :
return JsonResponse({'message':'삭제할 수 없는 댓글입니다'}, status=400)
except KeyError :
return JsonResponse({'message':'KEY_ERROR'})
Comment.objects.filter(id=comment_id).delete()
return JsonResponse({'message':'comment delete'}, status=200)
로그인이 되어 있어야 하므로 login_decorator 함수를 우선적으로 실행한다.
그리고 데코레이터의 파라미터들과 rest api 설정에 관해 연관성이 있는데
(아래 내용들은 내 생각임, 반박 시 님들 말이 맞음)
일반적인 조회와 등록은 self, request만 있으면 되지만 수정과 삭제는
무조건 특정 대상이 포함되어야 한다.
예를 들어, 어떤 걸 수정할건지? 어떤 걸 삭제할건지?
그래서 views.py의 메서드에 대상의 변수를 가져오는데, 여기선 그게 바로 id이다
def login_decorator(func) :
def wrapper(self, request, *args, **kwargs) :
데코레이터를 시작할 때 변수를 self, request, *args, **kwargs 4개를 잡았는데
만약 self, request만 설정한다면, 내가 delete 메서도에서 설정한 변수 id를
데코레이터에서 받을 수 없어서 에러가 발생한다.
그래서 데코레이터에 args, kwargs를 추가 파라미터로 선언했다.
어쨌든, 이미 삭제되었는지 확인해서 미리 삭제된거면 메시지띄우고 아니면 삭제하고가 끝