Развернутый API Django Rest Framework выдает сообщение «Server got itself in trouble» при любом вызове с полезной нагрузкой
Я развертываю свой Django Rest API на веб-сервере, работающем под управлением Ubuntu 24.04 LTS Linux и использующем веб-сервер Apache. Этот веб-сервер является внешним; я его не настраивал, поэтому некоторые детали его работы для меня являются «черным ящиком».
Я столкнулся с очень раздражающей ошибкой, при которой я получаю ошибку 500, говорящую «Сервер попал в беду», всякий раз, когда я добавляю полезную нагрузку в любой запрос. При этом не имеет значения метод: это может быть GET, POST, PUT, PATCH или DELETE, и все равно будет возникать ошибка...
Однако, когда я запускаю запрос без полезной нагрузки, я не сталкиваюсь с этой ошибкой (вместо этого я сталкиваюсь с ожидаемыми ошибками, связанными с отсутствием ожидаемых данных запроса)...
Вот некоторые подробности о сервере, которые могут дать представление о нем:
- Приложение работает в контейнере 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.