向APIException添加自定义响应标头

ubh*_*sat 7 python django django-rest-framework

我创建了一个引用http://django-rest-framework.org/api-guide/exceptions.html的自定义异常.

请知道我有自己的身份验证后端.因此我没有使用rest_framework的身份验证模块.

对于身份验证错误,我想将"WWW-Authenticate:Token"标头添加到从异常发送的响应中.

任何想法都会非常有帮助.

更新:

谢谢@Pathétique,这就是我最终要做的事情.

- 有一个名为BaseView的基础视图类.

- 在我的案例'WWW-Authenticate'中覆盖handle_exception方法来设置适当的标题.

这是代码:

class BaseView(APIView):
  def handle_exception(self, exc):
     if isinstance(exc, MYEXCEPTION):
        self.headers['WWW-Authenticate'] = "Token"
        return Response({'detail': exc.detail,
                        status=exc.status_code, exception=True)
Run Code Online (Sandbox Code Playgroud)

你的意见?

Fiv*_*ver 5

尝试覆盖finalize_response您的休息框架视图:

def finalize_response(self, request, *args, **kwargs):
    response = super(SomeAPIView, self).finalize_response(request, *args, **kwargs)
    response['WWW-Authenticate'] = 'Token'
    return response
Run Code Online (Sandbox Code Playgroud)

编辑:

看到你的更新后,我认为你的覆盖handle_exception应该工作,我只会添加一个else语句来调用父方法来覆盖其他异常.我在覆盖调度时注意到的一件事,这可能不是一个问题,是为self.headers设置一个新的键/值导致服务器错误,我没有花时间追踪.无论如何,你似乎走在了正确的轨道上.