我想从django rest框架中自定义错误响应。 这是来自django休息的诽谤错误回复..
{
"style": [
"This field is required."
],
"code": [
"code must be in 60 to 120 chars."
]
}
我想像....那样自定义它。
{
"style": [
"error_code":"20"
"error_message":"This field is required."
],
"code": [
"error_code":"22"
"error_message":"code must be in 60 to 120 chars."
]
}
答案 0 :(得分:1)
我在显示错误时遇到了同样的问题。首先,您应该知道不能在列表(即"style": ["error_code": "20", "error_message": "This field is required."]
)中使用键值对,并且如果要将错误转换为此自定义类型,则应将类型更改为字典。一种简单的方法是,您可以拥有自己的自定义异常处理程序,然后告诉rest框架使用该异常处理程序来自定义您的异常。首先,您应该在项目settings.py
中添加以下行:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'utils.exception_handlers.custom_exception_handler', # You should add the path to your custom exception handler here.
}
这告诉所有异常都应通过此处理程序。之后,您应该添加python文件并在其中添加代码(使用前面提到的settings.py
中的此文件路径)。在以下代码中,您可以看到此处理程序的示例:
from rest_framework.exceptions import ErrorDetail
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
custom_data = {}
if isinstance(response.data, dict):
for key, value in response.data.items():
if value and isinstance(value, list) and isinstance(value[0], ErrorDetail):
custom_response[key] = {
"error_message": str(value[0]),
"error_code": response.status_code # or any custom code that you need
}
else:
break
if custom_data:
response.data = custom_data
return response
注意:这是一个简单的示例,您应该测试API以确保一切正常。