gpt4 book ai didi

django-rest-framework - 修改 Djangorestframework 响应结构

转载 作者:行者123 更新时间:2023-12-03 23:54:16 25 4
gpt4 key购买 nike

我遇到了这样一种情况,我的前端人员需要来自我所有端点的以下格式的响应。
{
status: 200,
message: "OK",
content: {Normal DRF Response Body}
}

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

我在想是否有任何方法可以扩展 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
)

关于django-rest-framework - 修改 Djangorestframework 响应结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com