Как вернуть ошибку в формате JSON вместо HTML в REST-фреймворке?

Я хочу сделать исключение обработчика ошибок, чтобы вернуть ошибку 404 вместо этого html. как мне это сделать? enter image description here

я попробовал следующий код, но он не сработал

from rest_framework.views import exception_handler
from rest_framework.response import Response
from rest_framework import status
from django.http import Http404

def custom_exception_handler(exc, context):
    # Call the default exception handler first,
    # to get the standard error response.
    response = exception_handler(exc, context)

    # Now add the HTTP 404 handling
    if isinstance(exc, Http404):
        custom_response_data = { "error": "page not found" }
        return Response(custom_response_data, status=status.HTTP_404_NOT_FOUND)

    # Return the default response if the exception handled is not a Http404
    return response

Я создаю то же самое, это работает нормально для меня

путь к каталогу (myapp/custom_exception.py)

from rest_framework.views import exception_handler


def custom_exception_handler(exc, context):
    response = exception_handler(exc, context)
    if response.status_code == 404:
        response.data = {
            "success": False,
            "message": "Not found❗",
            "data": {}
        }
        return response
    elif response.status_code == 500:
        response.data = {
            "success": False,
            "message": "Internal server error! 🌐",
            "data": {}
        }
    # elif response.status_code == 400:
    #     response.data = {
    #         "success": False,
    #         "message": "Bad request!",
    #         "data": {}
    #     }
    elif response.status_code == 401:
        response.data = {
            "success": False,
            "message": "Login required! 🗝️",
            "data": {}
        }
    elif response.status_code == 403:
        response.data = {
            "success": False,
            "message": "Permission denied!",
            "data": {}
        }

    return response

settings.py

REST_FRAMEWORK = {

    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],

    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
    ],

    'EXCEPTION_HANDLER': 'myapp.custom_exception.custom_exception_handler',
}
Вернуться на верх