Django Rest Framework 사용자 정의 반환 json 형식

기본값
# view.py
from rest_framework.generics import ListAPIView
from .serializer import SnippetSerializer
from .models import Snippet

class SnippetList(ListAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer


액세스http://127.0.0.1:8000/snippets/
[
    {
        "code": "foo = \"bar\"
"
, "id": 1, "language": "python", "linenos": false, "style": "friendly", "title": "" }, { "code": "print(\"hello, world\")
"
, "id": 2, "language": "python", "linenos": false, "style": "friendly", "title": "" } ]

사용자 정의response
실제 개발에서 우리는 더 많은 필드를 되돌려야 한다. 예를 들어 다음과 같다.
{
    "code": 0,
    "data": [], #     
    "msg": "",
    "total": ""
}

이때 리스트를 다시 쓰는 방법이 필요합니다.
class SnippetList(ListAPIView):
    def list(self, request, *args, **kwargs):
        queryset = Snippet.objects.all()
        response = {
            'code': 0,
            'data': [],
            'msg': 'success',
            'total': ''
        }
        serializer = SnippetSerializer(queryset, many=True)
        response['data'] = serializer.data
        response['total'] = len(serializer.data)
        return Response(response)

액세스http://127.0.0.1:8000/snippets/
{
    "code": 0,
    "data": [
        {
            "code": "foo = \"bar\"
"
, "id": 1, "language": "python", "linenos": false, "style": "friendly", "title": "" }, { "code": "print(\"hello, world\")
"
, "id": 2, "language": "python", "linenos": false, "style": "friendly", "title": "" } ], "msg": "success", "total": 2 }

좋은 웹페이지 즐겨찾기