Skip to main content
 首页 » 编程设计

python之django-rest-framework 自定义序列化程序的输出

2024年10月25日39mfryf

使用以下模型和序列化器:

class Person(models.Model): 
    name = models.CharField(max_length=30) 
 
 
class PersonSerializer(serializers.Serializer): 
 
    class Meta: 
        model = User 
        fields = ('name',) 

我得到:

[ 
   {"name": "Jon"}, 
   {"name": "Joe"}, 
   {"name": "Jim"} 
] 

我如何自定义序列化程序以使其输出如下内容:

{ 
  "out": [ 
    {"name": "Jon"}, 
    {"name": "Joe"}, 
    {"name": "Jim"} 
  ], 
  "message": "success" 
} 

这里 message 是在运行时构建的,否则我可以在 JSONRenderer 中对其进行硬编码。

请您参考如下方法:

您还没有真正指定您需要对此消息进行什么类型的控制,或者您希望能够在何处定义它(在序列化程序级别, View 级别?)。

您始终可以像这样重写调度方法(MySimpleView View 类):

def dispatch(self, request, *args, **kwargs): 
    response = super(MySimpleView, self).dispatch(request, *args, **kwargs) 
 
    data = {} 
    data['out'] = response.data 
    data['message'] = "My message" 
 
    response.data = data 
 
    return response 

我假设您想根据响应状态控制您的自定义消息,所以这似乎是一个完美的地方,因为调度方法返回响应本身。

所以现在只需将它变成一个不错的 mixin 并在您的 View 中重用它..

但如果您不需要响应状态,那么自定义渲染器就是您的最佳选择。