클래스 뷰
- 코드를 재사용하고 뷰를 체계적으로 구성할 수 있다.
- def 메소드( ) : 형태를 가진다.
- url 설정시 함수명 뒤에 as_view()를 사용한다.
https://www.django-rest-framework.org/tutorial/3-class-based-views/
from rest_framework.views import APIView
from drf_yasg.utils import swagger_auto_schema
# 함수 articleAPI 변형
class ArticleList(APIView):
def get(self, request, format=None):
articles = Articles.objects.all()
serialize = ArticleSerialize(articles, many=True)
return Response(serialize.data)
# 스웨거에서도 편집이 가능
@swagger_auto_schema(request_body=ArticleSerialize)
def post(self, request, format=None):
serialize = ArticleSerialize(data = request.data)
if serialize.is_valid():
serialize.save()
return Response(serialize.data, status=status.HTTP_201_CREATED)
else:
print(serialize.errors)
return Response(serialize.errors, status=status.HTTP_400_BAD_REQUEST)
class ArticleDetail(APIView):
def get(self, request, article_id, format=None):
article = get_object_or_404(Articles, id=article_id)
serialize = ArticleSerialize(article)
return Response(serialize.data)
def put(self, request, article_id, format=None):
article = get_object_or_404(Articles, id=article_id)
serialize = ArticleSerialize(article, data = request.data)
if serialize.is_valid():
serialize.save()
return Response(serialize.data)
return Response(serialize.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, article_id, format=None):
article = get_object_or_404(Articles, id=article_id)
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
app - urls.py
# 수정
urlpatterns = [
# 클래스형을 사용할 때 as_view()를 사용
path('', views.ArticleList.as_view(), name='index'),
path('<int:article_id>/', views.ArticleDetail.as_view(), name='article_view'),
]
'Python > Django' 카테고리의 다른 글
[DRF] 05. 기본 JWT 토큰 (0) | 2023.04.24 |
---|---|
[DRF] 04.5 Fetch API, CORS 에러 (0) | 2023.04.24 |
[DRF] 03. postman-1, swagger (0) | 2023.04.24 |
[DRF] 02. @api_view (0) | 2023.04.24 |
[DRF] 01. 시리얼라이즈 (0) | 2023.04.24 |