∟ Framework/∟ DRF

DRF Single Model CRUD API 구현

최 수빈 2025. 3. 29. 19:10

 

 

DRF의 ModelSerializer를 활용한 Django Model JSON 형태 직렬화

단일 모델 기반 데이터 조회, 생성, 수정, 삭제하는 기본 API 구성

 

ModelSerializer는 Django의 ModelForm과 비슷한 역할을 함

직렬화와 유효성 검사, 저장까지 전부 처리할 수 있어 매우 강력

 

 

 

urls.py & 기본 구조 설정

 

프로젝트 URL 연결

# api_pjt/urls.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")),
]

 

앱 URL 설정

# articles/urls.py
from django.urls import path
from . import views

app_name = "articles"
urlpatterns = [
    path("", views.article_list, name="article_list"),
    path("<int:pk>/", views.article_detail, name="article_detail"),
]

 

 

Article 모델의 Serializer 정의

# articles/serializers.py
from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = "__all__"

 

 

API 기능별 정리

 

목록 조회 (List)

# articles/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Article
from .serializers import ArticleSerializer

@api_view(["GET"])
def article_list(request):
    articles = Article.objects.all()
    serializer = ArticleSerializer(articles, many=True)
    return Response(serializer.data)

Article 목록조회

 

 

상세 조회 (Detail)

# articles/views.py
from django.shortcuts import get_object_or_404

@api_view(["GET"])
def article_detail(request, pk):
    article = get_object_or_404(Article, pk=pk)
    serializer = ArticleSerializer(article)
    return Response(serializer.data)

Article 상세조회

 

 

생성 (Create)

# articles/views.py
from rest_framework import status

@api_view(["GET", "POST"])
def article_list(request):
    if request.method == "GET":
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        return Response(serializer.data)
    elif request.method == "POST":
        serializer = ArticleSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)

Article 생성

 

삭제 (Delete)

# articles/views.py
@api_view(["GET", "DELETE"])
def article_detail(request, pk):
    article = get_object_or_404(Article, pk=pk)

    if request.method == "GET":
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

    elif request.method == "DELETE":
        article.delete()
        return Response({"delete": f"Article({pk}) is deleted."}, status=status.HTTP_200_OK)

Article 삭제

 

 

수정 (Update)

@api_view(["GET", "DELETE", "PUT", "PATCH"])
def article_detail(request, pk):
    article = get_object_or_404(Article, pk=pk)

    if request.method == "GET":
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

    elif request.method == "DELETE":
        article.delete()
        return Response(
            {"delete": f"Article({pk}) is deleted."}, status=status.HTTP_200_OK
        )

    elif request.method in ["PUT", "PATCH"]:
        # partial=True는 PATCH일 때만 적용
        serializer = ArticleSerializer(
            article, data=request.data, partial=(request.method == "PATCH")
        )
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response(serializer.data)

PUT은 전체 필드를 요구하고, PATCH는 일부 필드만 수정할 때 사용

→ partial=True 옵션을 사용하여 PUT과 PATCH를 구분

PUT과 PATCH

DRF Serializer - Partial Updates

 

Serializers - Django REST framework

 

www.django-rest-framework.org

 

 

 

 

 

'∟ Framework > ∟ DRF' 카테고리의 다른 글

DRF models with relationship CRUD API 구현  (0) 2025.03.30
Class Based View (CBV)  (0) 2025.03.29
Django REST Framework(DRF) API 구현  (0) 2025.03.29
JSON Response와 Serialization  (0) 2025.03.29
RESTful API와 JSON  (1) 2025.03.28