DRF Single Model
- DRF 로 단일 모델의 데이터를 직렬화해 JSON 형식으로 응답할 수 있도록 하는 작업.
- Django 모델 데이터를 직렬화해 클라이언트에 전달하는 API 를 만들때 요구됨.
- 이후 추가할 CRUD 는 DRF Single Model 을 적용, 데이터를 JSON 형식으로 받아 Post 한다.
CRUD 기능 추가
api_pjt/url.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("api/v1/articles/", include("articles.urls")),
]
articles/url.py
from django.urls import path
from . import views
app_name = "articles"
urlpatterns = [
path("", views.article_list, name="article_list"),
path("/", views.article_detail, name="article_detail"),
]
articles/view.py
from django.shortcuts import get_object_or_404
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import ArticleSerializer
from .models import Article
from rest_framework import status
# 전체 Article 조회 및 새 Article 생성
@api_view(["GET", "POST"])
def article_list(request):
# GET 요청: 모든 Article 객체를 조회하고 직렬화하여 반환
if request.method == "GET":
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
# POST 요청: 새 Article 객체를 생성하고 직렬화하여 반환
elif request.method == "POST":
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
# 단일 Article 조회, 수정 및 삭제
@api_view(["GET", "DELETE", "PUT"])
def article_detail(request, pk):
# pk에 해당하는 Article 객체를 조회, 없으면 404 반환
article = get_object_or_404(Article, pk=pk)
# GET 요청: 해당 Article 객체를 직렬화하여 반환
if request.method == "GET":
serializer = ArticleSerializer(article)
return Response(serializer.data)
# PUT 요청: 해당 Article 객체를 수정하고 직렬화하여 반환
elif request.method == "PUT":
serializer = ArticleSerializer(article, data=request.data, partial=True)
if serializer.is_valid(raise_exception=True):
serializer.save() # 유효한 값일 시 저장
return Response(serializer.data)
# DELETE 요청: 해당 Article 객체를 삭제하고 삭제 메시지 반환
elif request.method == "DELETE":
article.delete() # Article 삭제
data = {"delete": f"Article({pk}) is deleted."} # 삭제 메시지
return Response(data, status=status.HTTP_200_OK)
CRUD 기능 테스트
127.0.0.1:8000 로 접근

- Post 버튼을 누르면 정상적으로 Create 되는 것을 확인할 수 있다.
Postman

- Postman 을 이용해 추가했던 CRUD 기능을 테스트해볼 수도 있다.
- Delete 로 30번째 Article 삭제 시도시 지정해뒀던 "Article({pk}) is deleted." 삭제 메시지가 뜨는 것이 확인된다.