django rest 更改 json 响应设计
Posted
技术标签:
【中文标题】django rest 更改 json 响应设计【英文标题】:django rest change json response design 【发布时间】:2016-12-21 17:41:03 【问题描述】:我正在使用 Django 休息教程,我看到所有响应都只返回模型字段,例如:
[
"id": 1,
"title": "",
"code": "foo = \"bar\"\n",
"linenos": false,
"language": "python",
"style": "friendly"
]
我的问题是如何设计响应,例如:
users:[
"id": 1,
"title": "",
"code": "foo = \"bar\"\n",
"linenos": false,
"language": "python",
"style": "friendly"
]
【问题讨论】:
我不明白问题是什么,你能更描述一下吗?提前致谢! 谢谢回复,是不是我的例子不好? 您发布的两个代码示例之间的唯一区别几乎相同。你的问题是什么,你想要的输出是什么,到目前为止你做了什么? :D 他想添加一个根元素。 ***.com/questions/14824807/… 正如我所写,我遵循 django rest 教程 (django-rest-framework.org/tutorial/2-requests-and-responses/…),我问我是否可以采用示例并为 json 对象添加它们的名称,就像在我的第二个示例中一样,我添加了“用户”这个词 【参考方案1】:据我所知,您正在使用以下代码,我已对其进行了修改以执行您的要求。但是,我建议除非您有充分的理由这样做,否则不要修改给出响应的方式。这会导致将来为 ModelViewSets 创建多个对象时变得复杂,并且所有 list() 方法都会返回不同的值。
我真的不喜欢下面的内容,但它确实回答了这个问题。此外,您可以将序列化程序更改为嵌套序列化程序,但这本身就是另一个问题。
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
@api_view(['GET', 'POST'])
def snippet_list(request):
"""
List all snippets, or create a new snippet.
"""
if request.method == 'GET':
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
return Response('users': serializer.data)
elif request.method == 'POST':
# Assuming we have modified the below - we have to hack around it
serializer = SnippetSerializer(data=request.data['users'])
if serializer.is_valid():
serializer.save()
return Response('users': serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
上面应该给你下面的回应:
"users": [
"id": 1,
"title": "",
"code": "foo=\"bar\"\n",
"linenos": false,
"language": "python",
"style": "friendly"
,
"id": 2,
"title": "",
"code": "print\"hello, world\"\n",
"linenos": false,
"language": "python",
"style": "friendly"
]
【讨论】:
感谢您的帮助!我如何在响应中组合两个没有任何关系的模型?例如“用户”和“地址” 这是相同的方法。将不同的 QuerySet 与不同的序列化程序一起使用,然后使用单独的键值并传入序列化程序数据。以上是关于django rest 更改 json 响应设计的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 django rest 框架返回的 JSON 在响应中有正斜杠?
django rest框架列表查询自定义json数组结果响应,因为日期格式
Django 将查询集序列化为 JSON 以仅使用字段信息和 id 构造 RESTful 响应