python - 如何在 Django REST 框架中返回自定义 JSON

我正在尝试使用 get_queryset 返回自定义 json,但总是得到 404 错误 作为响应。

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 数据的正确响应。我做错了什么?

最佳答案

如果您不需要 ModelViewSet 并且只想在 GET 请求上自定义 JSON

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

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

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

使用模型 View 集

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

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

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

.retrieve() 返回自定义 JSON和/或 .list()ModelViewSet

例如覆盖 .retrieve()检索单个对象时返回自定义 View 。我们可以看看default implementation which looks like this :

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'})

https://stackoverflow.com/questions/35019030/

相关文章:

python - 如何在保留矩阵维度的同时序列化 numpy 数组?

python - 在 View 中强制应用程序/json MIME 类型(Flask)

java - 将 InputStream 转换为 JSONObject

json - Scala:将 JSON 直接解析为案例类

json - 在 Play Framework JsObject 中解析 Json 数组

json - 我应该如何处理 JSON 中的 HATEOAS 链接和引用?

javascript - IE10/11 Ajax XHR 错误 - SCRIPT7002 : XM

c# - 如何从 jQuery ajax 调用将复杂对象传递给 ASP.NET WebApi GET

json - JSONObject 的 Jackson 2 等价物是什么?

java - 非空属性引用 transient 值 - transient 实例必须在当前操作之前保