Развернутый API Django Rest Framework выдает сообщение «Server got itself in trouble» при любом вызове с полезной нагрузкой

Я развертываю свой Django Rest API на веб-сервере, работающем под управлением Ubuntu 24.04 LTS Linux и использующем веб-сервер Apache. Этот веб-сервер является внешним; я его не настраивал, поэтому некоторые детали его работы для меня являются «черным ящиком».

Я столкнулся с очень раздражающей ошибкой, при которой я получаю ошибку 500, говорящую «Сервер попал в беду», всякий раз, когда я добавляю полезную нагрузку в любой запрос. При этом не имеет значения метод: это может быть GET, POST, PUT, PATCH или DELETE, и все равно будет возникать ошибка... For instance, a GET request with some payload will give this error

Однако, когда я запускаю запрос без полезной нагрузки, я не сталкиваюсь с этой ошибкой (вместо этого я сталкиваюсь с ожидаемыми ошибками, связанными с отсутствием ожидаемых данных запроса)... The same request, but without a request body

Вот некоторые подробности о сервере, которые могут дать представление о нем:

Diagram of how the external server works

  • Приложение работает в контейнере Gunicorn
  • .
  • Запросы клиентов поступают на обратный прокси-сервер и перенаправляются в приложение
  • .
  • Приложение обрабатывает входящие запросы и прослушивает их

Здесь также представлен файл settings.py, который я использую. Я установил DEBUG=True, чтобы попытаться докопаться до корня проблемы...

Есть журналы, к которым я могу получить доступ, но там нет ничего, кроме api/users 404: Bad request, что указывало бы на ошибку.

Спасибо всем, кто может помочь мне разобраться в этом вопросе!

Ошибка, по-видимому, возникает из-за того, что представление не проверяет, прошел ли пользователь проверку подлинности перед доступом к его атрибутам. Django использует анонимного пользователя для обработки сеансов пользователей, не прошедших проверку подлинности, и в этой модели нет поля user_id, которое вызывает ошибку 500.

Проверьте свой режим просмотра, чтобы убедиться, что пользователь прошел проверку подлинности, прежде чем пытаться получить доступ к user_id. Может помочь что-то вроде этого:

if not request.user.is_authenticated:
    return JsonResponse({"error": "User not authenticated"}, status=401)

Однако, чтобы вам было проще, не могли бы вы поделиться кодом для полного просмотра? В частности, как вы получаете пользователя и доступ к его атрибутам.

Пожалуйста, сначала войдите в систему, а затем запустите api, если у вас нет страницы входа в систему, вы можете попробовать войти со своей страницы входа в систему администратора django и попробовать использовать API.

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