json - Django休息框架: How to add an array name

标签 json django django-models django-rest-framework

假设我有一个简单的 django 模型:

class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')

当我通过 django Web 框架将其中的信息显示为 JSON 时,我得到:

[{"id": 1, "title": "hello"}, {"id": 2, "title": "world"}]

如何将数组标题添加到生成的 JSON 中?就像这样:

["books" :{"id": 1, "title": "hello"}, {"id": 2, "title": "world"}]

最佳答案

所以你的客户端API要求JSON是一个对象而不是数组(当使用浏览器内置的javascript解析器解析JSON时有一个安全原理,但我忘记了原因)...

如果您的客户端 API 不介意 PaginationSerializer 添加的额外字段,您可以执行以下操作:

class BookSerializer(pagination.BasePaginationSerializer):
    results_field = "books"

class BookListView(generics.ListAPIView):
    model = Book
    pagination_serializer_class = BookSerializer
    paginate_by = 9999

这将导致:

{
   'count': 2, 
   'next': null, 
   'previous': null, 
   'books': [
       {"id": 1, "title": "hello"}, 
       {"id": 2, "title": "world"}
   ]
}

[更新]

避免使用数组作为 JSON 根的安全原因是 JSON Hijacking 。基本上,聪明的黑客可以重写数组构造函数来做一些令人讨厌的事情。仅当您的 API 正在应答 GET 请求并使用 cookie 进行身份验证时才相关。

关于json - Django休息框架: How to add an array name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433314/

相关文章:

javascript - 从外部 API 为 React 组件绑定(bind)数据

javascript - 创建以变量名作为键的 Javascript 对象

javascript - 发送请求时从哪里获取值?

python - 如何软删除与 Django 的多对多关系

java - 如何检查 JSON 对象在 Java 中是否为空?

c# - POST json 字典

python - 如何返回用户名而不是 ID

python - Django objects.all() 空查询集,在 shell 中不为空

django - Django-排除内联管理界面中的某些字段

django - 无法将对象添加到 Django 的多对多字段