Преобразование исключений запросов python в исключения API django-rest-framework
Я разрабатываю REST API с использованием django-rest-framework, который должен взаимодействовать со сторонним API.
Я использую requests для взаимодействия с этим сторонним API.
Некоторые повторяющиеся шаблоны, которые я получаю в своем коде - это выполнение запроса от обработчика APIView
def calculate_order(order):
url = f"https://api.anotherservice.com/orders/calculate/"
try:
response = requests.post(url, json=order.data)
response.raise_for_status()
# TODO: handle errors, just printing and re-raising for now
except requests.exceptions.HTTPError as errh:
raise errh
except requests.exceptions.ConnectionError as errc:
print(errc)
raise errc
except requests.exceptions.Timeout as errt:
print(errt)
raise errt
except requests.exceptions.RequestException as err:
print(err)
raise err
return response.json()
# ... In my view
def post(self, request, *args, **kwargs):
# ... Some preprocessing code here
order_calculated = calculate_order(order)
return Response(order_calculated, status=HTTP_200_OK)
DRF реализует механизм, который удерживает
- Подклассы
APIException
, возникающие внутри фреймворка REST.- Исключение в Django
Http404
.PermissionDenied
исключение из правил.
Я хотел бы узнать, существует ли пакет для преобразования исключений запросов в объекты исключений, которые может обрабатывать DRF. Также я буду рад узнать любые рекомендации о том, как это должно быть реализовано (лучшие практики).
Я гуглил, но термины с "Django" и "запросы" выдают результаты в основном по самому Django.