一尘不染

如何在Django REST Framework中返回自定义JSON

json

我试图用返回自定义json,get_queryset但总是得到404 error响应。

class TestViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Test.objects.all()
    serializer_class = TestSerializer

    def get_queryset(self):
        if self.request.method == "GET":
            content = {'user_count': '2'}
            return HttpResponse(json.dumps(content), content_type='application/json')

如果我删除所有内容,def我将获得标准json数据的正确响应。我做错了什么?


阅读 621

收藏
2020-07-27

共1个答案

一尘不染

如果您不需要ModelViewSet而只想在GET请求上使用自定义JSON

您也可以使用APIView,不需要模型

class MyOwnView(APIView):
    def get(self, request):
        return Response({'some': 'data'})

urlpatterns = [
    url(r'^my-own-view/$', MyOwnView.as_view()),
]

使用ModelViewSet

您已将自定义JSON放入get_queryset中,这是错误的。如果您想使用ModelViewSet,仅此一项就足够了:

class TestViewSet(viewsets.ModelViewSet):
    queryset = Test.objects.all()
    serializer_class = TestSerializer

这种ModelViewSet带有默认实现.list().retrieve().create().update(),和.destroy()。哪些可供您根据需要覆盖(自定义)

.retrieve()和/或 .list()中返回自定义JSONModelViewSet

例如,重写.retrieve()以在检索单个对象时返回自定义视图。我们可以看一下默认实现,如下所示

def retrieve(self, request, *args, **kwargs):
    instance = self.get_object()
    serializer = self.get_serializer(instance)
    return Response(serializer.data)

因此,以返回自定义JSON为例:

class TestViewSet(viewsets.ModelViewSet):
    queryset = Test.objects.all()
    serializer_class = TestSerializer

    def retrieve(self, request, *args, **kwargs):
        return Response({'something': 'my custom JSON'})

    def list(self, request, *args, **kwargs):
        return Response({'something': 'my custom JSON'})
2020-07-27