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 ~
'코딩공부' 카테고리의 다른 글
| 웹 서버와 웹 어플리케이션 서버, Gunicorn, Nginx / TIL_221101 (0) | 2022.11.01 |
|---|---|
| AWS란? / TIL_221031 (0) | 2022.10.31 |
| DRF(Django-rest-framework)란 ? / TIL_221024 (0) | 2022.10.24 |
| Django views.py에서 DB 데이터 다루기 / TIL_221021 (1) | 2022.10.21 |
| Django ForeignKey / TIL_221006 (1) | 2022.10.06 |
댓글