在Django rest framework渲染器类中获取响应状态

时间:2016-02-19 09:39:03

标签: django django-rest-framework

我已经实现了我的自定义渲染器:

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"}

2 个答案:

答案 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)