python framework is detected_python-在Django Rest Framework自定义异常处理程...

这应该适合您的情况.

from rest_framework.views import exception_handler

import sys

def custom_exception_handler(exc, context=None):

# Call REST framework's default exception handler first,

# to get the standard error response.

response = exception_handler(exc)

# Now add the HTTP status code to the response and rename detail to error

if response is not None:

response.data['status_code'] = response.status_code

response.data['request'] = context['request']

response.data['error'] = response.data.get('detail')

del response.data['detail']

return response

您可以从传递给custom_exception_handler的上下文中访问请求.这是在DRF 3.1.0中添加的.另请在解决该问题的地方参考此issue.

如果您使用的是DRF< 3.1,则在异常处理程序的上下文中将没有请求.您可以升级到DRF 3.1.3(最新版本为PyPI),然后轻松地在上下文中访问请求.

取自DRF 3.1.1源代码:

def get_exception_handler_context(self):

"""

Returns a dict that is passed through to EXCEPTION_HANDLER,

as the `context` argument.

"""

return {

'view': self,

'args': getattr(self, 'args', ()),

'kwargs': getattr(self, 'kwargs', {}),

'request': getattr(self, 'request', None)

}

另外,您需要在settings.py文件中配置异常处理程序.

REST_FRAMEWORK = {

'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'

}

如果未指定,则’EXCEPTION_HANDLER’设置默认为REST框架提供的标准异常处理程序:

REST_FRAMEWORK = {

'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'

}

注意:

Exception handler will only be called for responses generated by

raised exceptions. It will not be used for any responses returned

directly by the view, such as the HTTP_400_BAD_REQUEST responses that

are returned by the generic views when serializer validation fails.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值