【问题标题】:Where to alter the response of POST request in Django REST Framework在 Django REST Framework 中更改 POST 请求响应的位置
【发布时间】:2016-11-13 11:00:30
【问题描述】:

我有一个从CreateAPIView 继承的视图,并在 Django REST 框架中设置了模型序列化程序。

当我发送请求时,它会返回所创建对象的 JSON 表示。

我想包装响应中的数据,如下所示:

{'data'   : { 'field1' : 'value1' ,
              'field2' : value2 , 
               etc.....
             } , 
 'errors' : None , 
 'message': [{} , {}] , 
 'result' : 'OK' , 
}

哪里是修改返回数据的最佳位置?

我尝试创建一个自定义渲染器,如以下问题所示:Adding root element to json response (django-rest-framework) 但它从未被调用。 那是因为它只与 GET 请求相关而不是帖子吗?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    我认为这个结构不是很相关:

    1. result :为什么要包含一个字段说OK,因为请求的状态代码在这里为您提供此信息:200 -> OK,201 -> created,400 -> bad request 等...
    2. dataerrors 在同一个响应中对我来说没有意义。也许,您在序列化程序的 created 方法中遇到了特殊行为,但如果出现错误,似乎逻辑上没有数据可以发回(也许我错了)。 DRF 允许您使用.is_valid() 方法验证数据,并且您可以简单地使用(例如)发回错误
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

    或直接使用.is_valid(raise_exception=True) 引发异常。

    不过,如果你想保持这种结构,这项工作可以在你看来完成。示例:

    return Response({
        'data': serializer.data,
        'errors': serializer.errors, # `.is_valid()` must be called
        'message': [{} , {}], 
        'result':'OK'
    })
    

    【讨论】:

    • 我有点同意,但这就是我被要求实施的。
    • 哦,好的。所以正如我所说,在你看来做这项工作。如果你经常使用这个结构,你可以根据传递的序列化器创建一个帮助函数来构建这个结构。 :)
    • 它正在与 Salesforce 对话,这对于全方位的工作来说太可怕了。一切都需要付出更多的努力。
    • 是的,我猜这个结构是由 API 强加的:D
    猜你喜欢
    • 2023-01-08
    • 1970-01-01
    • 2017-11-23
    • 2020-11-09
    • 2015-12-17
    • 1970-01-01
    • 2018-09-22
    • 2016-12-29
    • 2019-05-18
    相关资源
    最近更新 更多