Python 为API调用创建基本响应

Python 为API调用创建基本响应,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想使用django rest框架创建一个API。到目前为止,我已经成功地设置了API的一个端点,并成功地获取了所有项。基本响应(没有后面描述的BaseResponse类)如下所示: [ { "uuid": "1db6a08d-ec63-4beb-8b41-9b042c53ab83", "created_at": "2018-03-12T19:25:07.073620Z", "updated_at": "2018-03-12T19:25:3

我想使用django rest框架创建一个API。到目前为止,我已经成功地设置了API的一个端点,并成功地获取了所有项。基本响应(没有后面描述的BaseResponse类)如下所示:

[
    {
        "uuid": "1db6a08d-ec63-4beb-8b41-9b042c53ab83",
        "created_at": "2018-03-12T19:25:07.073620Z",
        "updated_at": "2018-03-12T19:25:37.904350Z",
        "deleted_at": null,
        "random_name": "random name"
    }
]
我想要达到的结果是这样的:

[
    "success": true
    "message": "Some exception message",
    "data" :{
        "uuid": "1db6a08d-ec63-4beb-8b41-9b042c53ab83",
        "created_at": "2018-03-12T19:25:07.073620Z",
        "updated_at": "2018-03-12T19:25:37.904350Z",
        "deleted_at": null,
        "random_name": "random name"
    }
]
我通过创建一个
BaseResponse
类来实现这一点,在视图中,我只需将BaseResponse.to_dict()(我在类内部创建的方法)返回

视图:


我想提到的是,在当前的代码中,一切都按照预期进行,但我对代码有着巨大的双重理解(我只是觉得我重新发明了方向盘)。有人能告诉我这是否是解决我的问题的最佳解决方案吗?如果不是,我应该更改/使用什么?

您可以创建一个自定义渲染器。差不多

class CustomRenderer(JSONRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        resp = {
        'data': data
        }
        return super(CustomRenderer, self).render(resp, accepted_media_type, renderer_context)
然后创建一个中间件,如

class CustomResponseMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        response.data.update({'success': is_client_error(response.status_code) or is_server_error(response.status_code)})
    return response

好。。。。。对我来说很好。。。。另一个选项是使用DRF的视图集,特别是ListModelMixin。。。
class CustomRenderer(JSONRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        resp = {
        'data': data
        }
        return super(CustomRenderer, self).render(resp, accepted_media_type, renderer_context)
class CustomResponseMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        response.data.update({'success': is_client_error(response.status_code) or is_server_error(response.status_code)})
    return response