Django Rest Framework自定义404错误信息

2024-09-27 21:22:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基于类的通用视图:

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

在我的urls.py中,我有:

^{pr2}$

当使用不存在的id调用API时,它将返回HTTP 404响应,其中包含以下内容:

{
    "detail": "Not found."
}

是否可以修改此响应?在

我需要为这个视图自定义错误消息。在


Tags: ofproject视图restobjectsallmixinsclass
2条回答

此解决方案影响所有视图:

当然,您可以提供自定义异常处理程序: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']中提到您的处理程序

针对特定视图的解决方案:

^{pr2}$

可以通过将updateretrieve等特定方法重写为:

from django.http import Http404
from rest_framework.response import Response


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

    def retrieve(self, request, *args, **kwargs):
        try:
            return super().retrieve(request, *args, **kwargs)
        except Http404:
            return Response(data={"cusom": "message"})

    def update(self, request, *args, **kwargs):
        try:
            return super().update(request, *args, **kwargs)
        except Http404:
            return Response(data={"cusom": "message"})

相关问题 更多 >

    热门问题