我已经实现了我的自定义渲染器:
from rest_framework.renderers import JSONRenderer
class CustomJSONRenderer(JSONRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
//I am hardcoding status and message for now. Which I have to update according to the response.
data = {'data': data, 'message':'ok', 'status':200 }
return super(CustomJSONRenderer, self).render(data, accepted_media_type, renderer_context)
这工作得很好。现在,我想使用响应的HTTP状态代码更新status
,从而提供自定义message
。那我该怎么做呢?
基本上我想要这样的回答:
{"status":200, "data":[actual data comes here.], "message":"ok"}
答案 0 :(得分:2)
这不是渲染器的用途。您应该使用渲染器根据请求将响应转换为特定格式(json,html,csv等)。默认情况下,它将使用Accept
标头,但您可以映像以传递查询字符串参数以强制使用不同的输出。
我认为您要做的是自定义错误异常http://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling
希望这有帮助
答案 1 :(得分:0)
另外,我发现我们可以获得status
信息。 renderer_context
参数实际上包含以下信息-
{'view': <ViewSet object at 0x7ff3dcc3fac0>, 'args': (), 'kwargs': {}, 'request': <rest_framework.request.Request object at 0x7ff3dcc37e20>, 'response': <Response status_code=400, "application/json; charset=utf-8">}
这意味着renderer_context
参数是一个字典,可以用来修改您的响应。例如-
def render(self, data, accepted_media_type=None, renderer_context=None):
if renderer_context is not None:
print(renderer_context['response'].status_code)