gpt4 book ai didi

python - 404 错误的 Django Rest Framework 自定义消息

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:12 24 4
gpt4 key购买 nike

我有一个基于类的通用 View :

class ProjectDetails(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
generics.GenericAPIView):
queryset = Project.objects.all()
# Rest of definition

在我的 urls.py 中,我有:

urlpatterns = [
url(r'^(?P<pk>[0-9]+)/$', views.ProjectDetails.as_view())
]

当使用不存在的 ID 调用 API 时,它会返回 HTTP 404 响应,其内容为:

{
"detail": "Not found."
}

是否可以修改此响应?

我需要仅为此 View 自定义错误消息。

最佳答案

此解决方案影响所有 View :

您当然可以提供自定义异常处理程序:Custom exception handling

from rest_framework.views import exception_handler
from rest_framework import status

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)

# Now add the HTTP status code to the response.
if response.status_code == status.HTTP_404_NOT_FOUND:
response.data['custom_field'] = 'some_custom_value'

return response

当然你可以跳过默认的 rest_framework.views.exception_handler 并使其完全原始。

注意:记得在 django.conf.settings.REST_FRAMEWORK['EXCEPTION_HANDLER'] 中提及您的处理程序

针对特定 View 的解决方案:

from rest_framework.response import Response
# rest of the imports

class ProjectDetails(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
generics.GenericAPIView):
queryset = Project.objects.all()

def handle_exception(self, exc):
if isinstance(exc, Http404):
return Response({'data': 'your custom response'},
status=status.HTTP_404_NOT_FOUND)

return super(ProjectDetails, self).handle_exception(exc)

关于python - 404 错误的 Django Rest Framework 自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51836535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com