update
This commit is contained in:
@ -1,9 +1,10 @@
|
||||
# blog/urls.py
|
||||
|
||||
from django.urls import path
|
||||
from .views import PostListView, PostListCreateView
|
||||
from .views import PostListView, PostListCreateView, PostDetailView
|
||||
|
||||
urlpatterns = [
|
||||
path('posts/', PostListView.as_view(), name='post-list'),
|
||||
path('create/', PostListCreateView.as_view(), name='post-list-create'),
|
||||
path('posts/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
|
||||
]
|
||||
|
@ -1,15 +1,14 @@
|
||||
# blog/views.py
|
||||
|
||||
from rest_framework import generics, permissions
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
from .models import Post
|
||||
from .serializers import PostSerializer
|
||||
from .utils import verify_token_with_auth_server # ✅ 추가
|
||||
|
||||
from .utils import verify_token_with_auth_server
|
||||
|
||||
class PostListView(generics.ListAPIView):
|
||||
queryset = Post.objects.all().order_by('-created_at')
|
||||
serializer_class = PostSerializer
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
class PostListCreateView(generics.ListCreateAPIView):
|
||||
@ -18,8 +17,32 @@ class PostListCreateView(generics.ListCreateAPIView):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def perform_create(self, serializer):
|
||||
# ✅ 토큰 추출 및 유효성 2차 검증
|
||||
token = self.request.headers.get("Authorization", "").replace("Bearer ", "")
|
||||
verify_token_with_auth_server(token)
|
||||
serializer.save(author_name=self.request.user.username)
|
||||
|
||||
# ✅ 조회, 수정, 삭제 전부 처리
|
||||
class PostDetailView(generics.RetrieveUpdateDestroyAPIView):
|
||||
queryset = Post.objects.all()
|
||||
serializer_class = PostSerializer
|
||||
|
||||
def get_permissions(self):
|
||||
if self.request.method in ["PUT", "PATCH", "DELETE"]:
|
||||
return [permissions.IsAuthenticated()]
|
||||
return [permissions.AllowAny()]
|
||||
|
||||
def perform_update(self, serializer):
|
||||
token = self.request.headers.get("Authorization", "").replace("Bearer ", "")
|
||||
verify_token_with_auth_server(token)
|
||||
|
||||
serializer.save(author_name=self.request.user.username)
|
||||
if serializer.instance.author_name != self.request.user.username:
|
||||
raise PermissionDenied("작성자만 수정할 수 있습니다.")
|
||||
serializer.save()
|
||||
|
||||
def perform_destroy(self, instance):
|
||||
token = self.request.headers.get("Authorization", "").replace("Bearer ", "")
|
||||
verify_token_with_auth_server(token)
|
||||
|
||||
if instance.author_name != self.request.user.username:
|
||||
raise PermissionDenied("작성자만 삭제할 수 있습니다.")
|
||||
instance.delete()
|
||||
|
Reference in New Issue
Block a user