首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django Rest框架定制JSON回调

使用Django Rest框架定制JSON回调
EN

Stack Overflow用户
提问于 2017-05-17 00:58:54
回答 2查看 903关注 0票数 1

我只是想用https://jasonette.com/编写一个移动应用程序,但它需要每个响应的后端特定JSON格式,如下所示:

代码语言:javascript
复制
{
  "$jason": {
    "head": {
      "title": "{ ˃̵̑ᴥ˂̵̑}",
      "actions": {
        "$foreground": {
          "type": "$reload"
        },
        "$pull": {
          "type": "$reload"
        }
      }
    },
    "body": {
      "header": {
        "style": {
          "background": "#ffffff"
        }

为了测试目的,我序列化了常规的django_user模型:

代码语言:javascript
复制
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'email')

它返回一个带有用户列表的JSON对象。但是,如何使用附加值自定义这个JSON并将其格式化为Jasonette想要的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-17 05:29:28

可以通过在序列化程序中重写.to_representation()方法来更改序列化行为:

代码语言:javascript
复制
class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'email')

    def to_representation(self, user):
        data = super().to_representation(user)  # the original data

        return {
            '$jason': {
                'head': {
                    # ...
                },
                'body': data,
                # ...
            }
        }
票数 2
EN

Stack Overflow用户

发布于 2017-05-17 03:01:03

序列化程序将处理对象实例到原始数据类型字典的转换,反之亦然(就像django Form)。如果要增强JSON响应,请重写相应的视图方法。例如,您可以在视图中执行如下操作:

代码语言:javascript
复制
from rest_framework.response import Response


class UserViewSet(ModelViewSet):
    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.get_serializer(instance)
        data = serializer.data
        data.update({"foo": "bar"})
        return Response(data)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44013837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档