django restframework:如何添加数组名称

时间:2014-06-26 14:34:30

标签: 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"}]

1 个答案:

答案 0 :(得分:3)

所以你的客户端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进行身份验证时才相关。