我开始更深入地研究DRF,我想知道我想开始自定义错误消息,该错误消息通过API获得不正确的权限返回,我想包装一些额外的细节。
例如,如果未为受权限限制的端点提供身份验证凭据,则API返回:
{
"detail": "Authentication credentials were not provided."
}
这来自线171自rest_framework.exceptions
:https://github.com/encode/django-rest-framework/blob/master/rest_framework/exceptions.py。真的,我希望这与
{
"success": false,
"message": "Authentication credentials were not provided.",
"data": null
}
因此,我假设我现在需要开始自定义自己的异常。
我应该如何最好地做到这一点?
也许它与default_error_messages = {}
串行器内部有联系...
您可以在以下位置覆盖DRF的默认异常处理程序和JSON解析器settings.py
:
REST_FRAMEWORK = {
...
'EXCEPTION_HANDLER': 'helpers.exceptions.custom_exception_handler',
'DEFAULT_RENDERER_CLASSES': [
'helpers.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}
然后,只需自定义如何处理异常以及如何呈现响应即可:
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
# Customize your exception handling here
return response
而且,您可以使用自定义JSON渲染器,以防您需要对响应进行任何其他格式化,在我的情况下,我必须向有效负载添加“ status_code”:
class JSONRenderer(BaseJsonRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
"""
Render `data` into JSON, returning a bytestring.
"""
<Base code from the original class...>
response = renderer_context.get('response')
if response and 200 <= response.status_code <= 299 and 'status_code' not in response.data:
response.data = Errors.success(response.data)
<Base code from the original class...>
我Errors.success(response.data)
只是将成功状态代码合并到数据的一种简单方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句