[Django] APIView CRUD 예제 코드
2023. 8. 23. 16:05
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Item
from .serializers import ItemSerializer
class ItemListView(APIView):
def get(self, request):
items = Item.objects.all()
serializer = ItemSerializer(items, many=True)
return Response(serializer.data)
def post(self, request):
serializer = ItemSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class ItemDetailView(APIView):
def get_object(self, pk):
try:
return Item.objects.get(pk=pk) # 주어진 pk로 Item 객체를 가져오는 메소드
except Item.DoesNotExist:
raise status.HTTP_404_NOT_FOUND # Item이 없을 때 404 에러 반환
def get(self, request, pk):
item = self.get_object(pk) # get_object 메소드로 Item 객체 가져오기
serializer = ItemSerializer(item)
return Response(serializer.data)
def put(self, request, pk):
item = self.get_object(pk) # get_object 메소드로 Item 객체 가져오기
serializer = ItemSerializer(item, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
item = self.get_object(pk) # get_object 메소드로 Item 객체 가져오기
item.delete() # 해당 Item 객체 삭제
return Response(status=status.HTTP_204_NO_CONTENT)
# urls.py
from django.urls import path
from .views import ItemListView, ItemDetailView
urlpatterns = [
path('items/', ItemListView.as_view(), name='item-list'),
path('items/<int:pk>/', ItemDetailView.as_view(), name='item-detail'),
]
'WebFramework > [Django]' 카테고리의 다른 글
[Django] Serializer에 List 정의하기 (0) | 2023.08.23 |
---|---|
[Django] extends와 include (0) | 2023.07.26 |
[Django] Class Based View, Funtion Based View (0) | 2023.07.24 |
[Django] docker-Django 접속하기 (0) | 2023.07.11 |