Обработка ошибок сервера Django (5XX) в продакшене для предотвращения показа конфиденциальной информации

Я разрабатываю API с использованием Django Rest Framework. В коде может возникнуть множество исключительных ситуаций, о которых мы можем не подумать и которые приводят к ошибкам 5XX. Один из подходов к обработке этих ошибок - поместить try-exception во всю функцию (Или в те места, где вы предполагаете, что может произойти неизвестная ошибка). Я хочу показывать детали ошибки в ответе API (а не только в логгировании сервера), когда в Django включен режим отладки. Также я хочу скрыть эти детали в производственном режиме (когда отладка ложная) и просто передать код ошибки без тела, когда ошибка 5XX.

Есть ли какой-нибудь официальный (и эффективный) способ сделать это? Я думал о создании промежуточного программного обеспечения для обработки этого, но в этом случае я должен проверить все ответы перед передачей ответа пользователю, а это совсем не эффективно. Я подумал, что может быть есть встроенная функция для обработки этих вещей, и я могу переопределить ее, чтобы скрыть тело ошибки 5XX.

После просмотра дополнительной информации, вам просто нужно добавить оператор if, чтобы решить, что поместить в тело ответа. Это то, что Django уже делает по умолчанию. В качестве альтернативы, просто позвольте Django сделать это за вас и удалите try...except.

Оригинальный ответ:

Я хочу показывать детали ошибки в ответе API (не только на сервере логирования), когда в Django включен режим отладки. Также, я хочу скрыть эти детали в производственном режиме (когда отладка ложная) и просто передать код ошибки без тела, когда ошибка 5XX.

.

Вы уже ответили на свой вопрос. Установка DEBUG = True в settings.py приведет к HTML-ответу с трассировкой стека и другой отладочной информацией. Установка DEBUG = False отключает эту отладочную информацию и делает именно то, что вы говорите.

Если вы удалите try/except, Django должен просто выбросить ошибку как обычно - это отобразит детали, если settings.DEBUG, в противном случае будет показан шаблон ошибки, который вы можете настроить в соответствии с вашими потребностями. https://docs.djangoproject.com/en/4.0/topics/http/views/#customizing-error-views

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