Чтобы передать ответ от вложенной функции `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()