본문 바로가기
Django

[Django] DRF - 1차 프로젝트 리팩토링 (2) Category detail & list GET

by 혀넝 2022. 6. 7.

1. Category List GET

product GET과 유사하지만, 기존 코드에 limit, offset이 걸려 있어서 이번엔 pagination.py 파일을 따로 만들어 offset limit을 설정했다.

# pagination

from rest_framework.pagination import LimitOffsetPagination

class CategoryLimitOffsetPagination(LimitOffsetPagination): 
    default_limit = 5
# serializer

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model  = Category
        fields = '__all__'
# view

class CategoryListGV(generics.ListAPIView):
    queryset         = Category.objects.all()
    serializer_class = CategorySerializer
    pagination_class = CategoryLimitOffsetPagination

결과는 아래와 같다.

{
    "count": 11,
    "next": "http://127.0.0.1:8000/products/categories?limit=5&offset=5",
    "previous": null,
    "results": [
        {
            "id": 1,
            "category_name": "클렌저",
            "main_description": "....",
            "sub_description": "...."
        },
        {
            "id": 2,
            "category_name": "각질 제거",
            "main_description": "....",
            "sub_description": "...."
        },
        {
            "id": 3,
            "category_name": "트리트먼트 & 마스크",
           	"main_description": "....",
            "sub_description": "...."
        },
        {
            "id": 4,
            "category_name": "토너",
            "main_description": "....",
            "sub_description": "...."
        },
        {
            "id": 5,
            "category_name": "하이드레이터",
            "main_description": "....",
            "sub_description": "...."
        }
    ]
}

 

2. Category Detail GET

Product Detail GET과 마찬가지로, url에서 pk를 넘겨줘야 하고, serializer는 위와 같다.

# view

class CategoryDetailGV(generics.RetrieveAPIView):
    queryset         = Category.objects.all()
    serializer_class = CategorySerializer
# url

...
path('/categories/<int:pk>', CategoryDetailGV.as_view()),
...

 

결과는 아래와 같다.

{
    "id": 1,
    "category_name": "클렌저",
    "main_description": "피부의 남은 각질, 불필요한 유분 그리고 기타 잔여물을 말끔히 씻어내어 피부를 깨끗하게 하는 것은 인텔리전트 스킨케어의 기초입니다.",
    "sub_description": "<h2>처음의 시작</h2><p>각질, 불필요한 유분 그리고 기타 잔여물을 말끔히 씻어내어 피부를 깨끗하게 하는 것은 인텔리전트 스킨케어의 기초입니다.</p>"
}