Странное поведение при удалении элементов в приложениях 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 и клиентом.

Мои вопросы следующие:

  • любая идея, почему это происходит
  • где мне искать дальше, чтобы поймать ошибку

Все приложение работает так, как ожидалось, за исключением этой функции.

Спасибо.

Вернуться на верх