본문 바로가기
코딩공부

DRF Class based views_CRUD / TIL_221025

by Dong_Devlog 2022. 10. 25.

Django에서는 함수 기반의 views를 사용했다면 DRF에서는 클래스 기반의 views를 사용한다.

 

urls.py

from django.urls import path, include
from articles import views

urlpatterns = [
    path('', views.ArticleList.as_view(), name='index'),
    path('<int:article_id>/', views.ArticleDetail.as_view(), name='article_view'),
]

serializers.py

from rest_framework import serializers
from articles.models import Article

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

views.py

class ArticleDetail(APIView):
    def get(self, request, article_id, format=None):
        article = get_object_or_404(Article, id=article_id)
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

    def put(self, request, article_id, format=None):
        article = get_object_or_404(Article, id=article_id)
        serializer = ArticleSerializer(article, data = request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, article_id, format=None):
        article = get_object_or_404(Article, id=article_id)
        article.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

 

 

  • get_object_or_404

path로부터 넘겨 받은 article_id를 받아 model에서 정의된 article 객체들 중 id 값이 article_id인 것이 있으면 가져오고 아니면 404에러를 발생시키라는 의미

 

  • is_valid()

data 인자가 주어지면

.is_valid()가 호출되고 나서야 아래의 속성에 접근할 수 있다.

  • .initial_data 에 data 값을 넣어주고
  • .validated_data 에 유효성 검증을 통과한 값들을 넣어주고 .save() 시 이 값들을 저장
  • .errors 에는 유효성 검사에서의 오류들이
  • .serializer.data 에는 유효성 검사 후 인스턴스 값이 사전으로 저장된다.

 

  • status

코드를 보다 명확하고 읽기 쉽게 만드는 데 사용

  • 정보 : HTTP_100 ~
  • 성공 : HTTP_200 ~
  • 리디렉션 : HTTP_300 ~
  • 클라이언트 오류 : HTTP_400 ~
  • 서버 오류 : HTTP_500 ~

댓글