如何修改Django Rest Framework

时间:2016-07-01 04:01:56

标签: django django-rest-framework

我创建了以下序列化程序:

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = get_user_model()
        fields = (
            'url', 'username', 'email', 'password',
        )
        write_only_fields = ('password',)

我还实现了创建和更新方法。 现在,如果我尝试使用以下数据创建用户:

{
    "username": "foo",
    "email": "foo@thefoo.net",
    "password": "foo2016"
}

我会得到以下json回复:

{
    "url": "http://someurl.com/catalog/api/users/11/",
    "username": "foo",
    "email": "foo@thefoo.net"
}

我想要的是一个JSON响应,它有一个属性指示操作是否成功,如下所示:

{
    "success": true,
    "data": {
        "url": "http://someurl.com/foo/users/11/",
        "username": "foo",
        "email": "foo@thefoo.net"
    }
}

如果发生错误,响应将如下所示:

{
    "success": false,
    "data": {
        "username": [
            "This field is required."
        ]
    }
}

并且不应该是这样的:

{
    "username": [
        "This field is required."
    ]
}

我这样做的原因是为了改善前端的错误处理。

2 个答案:

答案 0 :(得分:0)

在Meta课程中,您可以像extra_kwargs

一样添加extra_kwargs = {'success': True}

请参阅此处的文档:http://www.django-rest-framework.org/api-guide/serializers/#additional-keyword-arguments

我希望有所帮助。但我同意Zhandos Zhylkaidar关于检查HTTP响应代码的HTTP错误。

答案 1 :(得分:0)

由于您要更改结果,因此应覆盖renderer,以便将序列化程序内容包装到:

{
    "success": false/true,
    "data": <content>
}