Чтобы передать ответ от вложенной функции `Django REST framework`

Я использую python django с Django REST framework

Он может вернуть ответ браузеру следующим образом, в views.py

from rest_framework.response import Response
    @api_view(['GET'])
    def get_by(request):
        res = {"test":"answer"}
        return Response(res)

Я хочу передать ответ браузеру, где вложенная функция

from rest_framework.response import Response
    @api_view(['GET'])
    def get_by(request):
        x(t)

def x():
   #error happens here!!
    res = {"error":"error happens!!"}
    return Response(res)

В этом случае все просто, я могу вернуть ошибку в первую функцию, а первая функция может вернуть ошибку Response.

но когда у вас есть три четыре пять вложенных функций?

Какова наилучшая практика?

Лучше использовать сериализатор или сервисы и обработать некоторую валидацию на них.

https://www.django-rest-framework.org/api-guide/serializers/#validation

С другой стороны, вы можете разработать несколько специализированных APIExcepetion и просто поднять их.

https://www.django-rest-framework.org/api-guide/exceptions/#api-reference

Как упоминалось в предыдущем ответе, вы можете использовать пользовательский APIException внутри функции, чтобы остановить обработчик api на полпути. Если вы не хотите, чтобы он возвращался как системная ошибка, вы можете установить код статуса ответа, как показано в примере ниже:

from rest_framework.exceptions import APIException
from rest_framework import status

class OkException(APIException):
    status_code = status.HTTP_200_OK
    default_detail = "error happens!!"
    default_code = "error_happens"

Затем вы можете поднять его внутри функции как обычное исключение

raise OkException()
Вернуться на верх