修改 Djangorestframework 响应结构



我遇到了一种情况,我的前端人员需要来自我所有端点的以下格式的响应。

{ status: 200, message: "OK", content: {Normal DRF Response Body} }

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

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

对此可以做些什么?

是的,有。

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

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'< your renderer >',       
),  
}

对于实际的渲染器 - 从rest_framework的JSON渲染器(rest_framework.renderers.JSONRenderer(中获取灵感。

你基本上可以采用这个JSONRenderer的实现,稍微改变渲染函数。

def render(self, data, accepted_media_type=None, renderer_context=None):
"""
Render `data` into JSON, returning a bytestring.
"""

在这里,您将可以访问数据和renderer_context。上下文具有响应对象,即您的响应。它具有"status_code"属性,您可以在响应中使用。

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
)

相关内容

  • 没有找到相关文章

最新更新