python - 将自定义响应 header 添加到 APIException

标签 python django django-rest-framework

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

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

对于身份验证错误,我想将“WWW-Authenticate: Token” header 添加到从异常发送的响应中。

任何想法都会很有帮助。

更新:

谢谢@Pathétique, 这就是我最终要做的。

-有一个名为 BaseView 的基 View 类。

-覆盖 handle_exception 方法以设置适当的 header ,在我的例子中为“WWW-Authenticate”。

代码如下:

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)

你的想法?

最佳答案

尝试在您的其余框架 View 中覆盖 finalize_response:

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

编辑:

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

关于python - 将自定义响应 header 添加到 APIException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262643/

相关文章:

python - 如何通过套接字检索 python.logging 日志记录

Python 丰富、不足或完美的数字

python - xmltodict unparse 解析不一样

python - 如何同时连接和填充?

python - django - url 标签不工作

python - 如何为Django Rest Framework指定过滤数据参数?

Django:从事务角度看 save() 和 create() 的区别

python - 如何在settings.py中获取主机名或IP,以便我可以使用它来决定要使用哪个应用程序的网址

django - 在 ModelViewSet 中创建 Django 记录后获取其 ID

django - 无法在 Django Rest Framework 序列化程序的 valid_data 中获取非模型字段