장고 (Django)

장고(Django) PUT/DELETE

터칭 데이터 2023. 11. 4. 19:21

 

 

 

상세 페이지와 PUT/DELETE 구현

 

이제는 Question의 상세 페이지를 보고 그 페이지에서 수정 및 삭제를 할 수 있는 기능을 구현해보려 합니다.

 

 

기존의 polls_api/views.py 파일에서

 

from django.shortcuts import render, get_object_or_404

# ...(중량)...

@api_view(['GET', 'PUT', 'DELETE'])
def question_detail(request, id):
    question = get_object_or_404(Question, pk=id)
    if request.method == 'GET':
        serializer = QuestionSerializer(question)
        return Response(serializer.data)
    
    if request.method == 'PUT':
        serializer = QuestionSerializer(question, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    if request.method == 'DELETE':
        question.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

 

위와 같이 question_detail메서드를 입력하고 shortcuts에서 get_object_or_404를 입력해 코드를 작성합니다.

 

 

 

 

 

그리고 polls_api/urls.py에서

 

from django.urls import path
from .views import *

urlpatterns = [
    path('question/', question_list, name='question_list'),
    path('question/<int:id>/', question_detail, name='question_detail'),
]

 

question/숫자아이디 URL을 입력 받으면 뷰의 question_detail로 연결하는 path를 작성합니다.

 

 

 

 

 

 

 

그리고 question 뒤에 question 데이터 중 하나의 아이디 숫자를 붙여 URL로 접속하면

 

상세 페이지가 뜨고 PUT(수정)과 DELETE(삭제)를 할 수 있는 기능들이 버튼으로 추가되었습니다.