Python 更改django rest框架中的默认身份验证消息
在Django Rest框架中的一个简单的Python 更改django rest框架中的默认身份验证消息,python,django,django-rest-framework,Python,Django,Django Rest Framework,在Django Rest框架中的一个简单的TokenAuthentication系统中,当您无法发送正确的授权令牌时,默认消息如下 { "detail": "Authentication credentials were not provided." } 我希望所有API响应都遵循某个模板,例如{success,message,data} 如何覆盖此错误消息? 创建这些API模板时的最佳实践是什么? 另外,我查了其他问题,但找不到有类似问题的人。如果已经回答了,我很高兴您能给我指一下。如果您需
TokenAuthentication
系统中,当您无法发送正确的授权令牌时,默认消息如下
{
"detail": "Authentication credentials were not provided."
}
我希望所有API响应都遵循某个模板,例如{success,message,data}
如何覆盖此错误消息?
创建这些API模板时的最佳实践是什么?
另外,我查了其他问题,但找不到有类似问题的人。如果已经回答了,我很高兴您能给我指一下。如果您需要更改默认消息,一种方法是实现您自己的错误处理程序,如下所示:
#your_app/error_handler.py
def custom_exception_handler(exc, context):
....
# ovverride IsAuthenticated permission class exception
if(response.data['detail'].code == 'not_authenticated'):
response.data['code'] = Unauthorized.default_code
response.data['message'] = Unauthorized.default_detail
del response.data['detail']
return response
另外,不要忘记在Django的settings.py中添加您自己的错误处理程序
REST_FRAMEWORK = {
"EXCEPTION_HANDLER": ("your_app.error_handler.custom_exception_handler")
}
此外,还可以实现自定义异常类。例如:
class UnreadableCSVFile(APIException):
status_code = 400
default_detail = "Unable to read file."
default_code = "unreadable_csv_file"
无例外的响应
您可以使用助手函数。像这样的
def render_response(success, data=None, item=None, items=None, err_name=None,
err_message=None):
if success:
if data is not None:
return {
"success": True,
"data": data
}
elif item is not None:
return {
"success": True,
"data": {
"item": item
}
}
elif items is not None:
return {
"success": True,
"data": {
"items": items
}
}
else:
return {
"success": False,
"error": {
"name": err_name,
"message": err_message
}
}
在每个响应的返回语句中,使用:
返回响应(render\u Response(True,data=serializer.data),status=status.200\u OK)
这将给
{
"success": true,
"data": {
...
}
}
这可以是您的标准格式。看看这个。这是关于覆盖drf中的默认异常:[谢谢@Winston!关于第二个问题,是否有一种通用的方法来模板化我的所有响应?您可以通过实现您自己的异常类并抛出它们,还可以使用您自己的异常处理程序来实现您想要的,正如我上面所说的。我指的是响应不是异常的情况?对于成功的请求,是存在的一种方法,我可以模板它像这些例外?请看一看,再次感谢,这正是我要找的!