Странное поведение при удалении элементов в приложениях Django и React stack
Я работаю над приложением с полным стеком, которое состоит из:
- Django (Django Rest Framework)
- React
- База данных PostgreSQL
- Redis
- Celery
Он развернут через docker. Все приложение работает хорошо и не имеет ошибок, которые невозможно отследить.
Однако, когда я пытаюсь удалить Project элемент из базы данных (это специфично для домена), я получаю ошибку 500 и никакой конкретной трассировки.
Я обнаружил эту ошибку на развернутом приложении. При осмотре вкладки Networking в Developer Tools я нашел запрос и увидел код возврата 500. Однако в Response.
ничего не было возвращено.Однако, я думаю, что something должно было быть возвращено. Код выглядит следующим образом:
class ProjectCRUD(GenericAPIView):
# [...]
def delete(self, request, pk):
try:
# [...] code that deletes all referenced values and current project
except ProtectedError as e:
return JsonResponse({
"error": "Project still referenced",
"details": str(e)
}, status=400)
except Exception as e:
return JsonResponse({"error": "Wrong project id"}, status=status.HTTP_400_BAD_REQUEST)
return JsonResponse({
'message': f'Project with id {project_id} was deleted successfully!'
}, status=status.HTTP_204_NO_CONTENT)
# [...]
Это предположение "Wrong project id", конечно же, плохо, и оно будет рефакторинговано, как только эта ошибка также будет найдена. Этот код гарантирует, что если возникло исключение, то оно будет поймано, возвращено что-то с хоть какой-то информацией. Если исключение не поймано, возвращается 204.
Захожу в приложение, создаю новый проект, пытаюсь его удалить и появляется ошибка 500 с ничем в Networking.
Следующий шаг - попробовать локально. Я запускаю локальный сервер с помощью python manage.py runserver. Это не проходит через docker, потому что redis и celery не используются для этой функции. Я создаю новый проект, пытаюсь удалить его, и консольный лог пишет 204, что означает, что он прошел.
Я запускаю docker. Повторяю процесс. Все работает, возвращается 204.
Далее я проверяю журналы docker развернутого приложения. Здесь начинаются странности. В логах бэкенда отображается 204, как и локально. Журналы фронтенда также показывают 204. Однако клиент (т.е. браузер) в сети выдает ошибку 500.
В результате поиска я пришел к выводу, что ошибка происходит где-то между Frontend и клиентом.
Мои вопросы следующие:
- любая идея, почему это происходит
- где мне искать дальше, чтобы поймать ошибку
Все приложение работает так, как ожидалось, за исключением этой функции.
Спасибо.