Django rest framework 修改Djangorest框架响应结构

Django rest framework 修改Djangorest框架响应结构,django-rest-framework,django-request,Django Rest Framework,Django Request,我遇到这样一种情况,我的前端人员需要我所有端点以以下格式做出响应 { 现状:200, 信息:“OK”, 内容:{Normal DRF Response Body} } 我知道我可以通过在所有视图中使用APIView来获得此结构,但是我将无法使用常规视图或视图集 我在想,是否有任何方法可以扩展DRF响应类,并在settings.py中指定扩展类,或者为此目的使用中间件 我们能为此做些什么 是的,有 您可以实现渲染器并将其添加到settings.py,如下所示: REST_FRAMEWORK =

我遇到这样一种情况,我的前端人员需要我所有端点以以下格式做出响应

<代码>{ 现状:200, 信息:“OK”, 内容:{Normal DRF Response Body} }

我知道我可以通过在所有视图中使用APIView来获得此结构,但是我将无法使用常规视图或视图集

我在想,是否有任何方法可以扩展DRF响应类,并在settings.py中指定扩展类,或者为此目的使用中间件

我们能为此做些什么

是的,有

您可以实现渲染器并将其添加到settings.py,如下所示:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        '< your renderer >',       
    ),  
}
在这里,您可以访问数据和渲染器上下文。上下文具有响应对象,它是您的响应。它具有“状态代码”属性,您可以在响应中使用该属性

response = renderer_context['response']
my_response = { "status" : response.status_code,
                "message" : "OK",
                "content" : data }
对于消息,您可以根据给定的状态代码从何处获得正确的消息

然后,如果遵循原始的JSONRendener实现,您可以找到以下代码段,只需将其更改为转储新响应:

ret = json.dumps(
        my_response, cls=self.encoder_class,
        indent=indent, ensure_ascii=self.ensure_ascii,
        allow_nan=not self.strict, separators=separators
    )

但这似乎只适用于列表和创建。更新中没有消息和状态,销毁中没有响应正文。
ret = json.dumps(
        my_response, cls=self.encoder_class,
        indent=indent, ensure_ascii=self.ensure_ascii,
        allow_nan=not self.strict, separators=separators
    )