Сохранение Django 400 неверных запросов для целей анализа

#python #django

#python #django

Вопрос:

У меня есть API на основе Django.

Иногда мои клиенты сообщают мне, что некоторые из их запросов возвращают 400 (неверный запрос), даже если они не должны этого делать.

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

Мой вопрос относительно моего метода заключается в следующем: как я могу «запустить» функцию, которая будет собирать запрос со всеми его заголовками каждый раз, когда я возвращаю ответ со статусом 400?

Комментарии:

1. Действительно ли 400 ответов генерируются самим Django?

2. Я использую Django rest framework, и там генерируется 400 для сбойных запросов, но я хочу, чтобы он обычно проверял статус возвращенного ответа и решал, требуется ли ведение журнала

3. тогда посмотрите на мой ответ…

Ответ №1:

Если ответ 400 генерируется Django, вы можете использовать пользовательское промежуточное программное обеспечение (осторожно: api промежуточного программного обеспечения изменен в 1.10, для django <= 1.9 документ здесь) и logging модуль — просто убедитесь, что ваше ведение журнала правильно настроено в настройках django.

Если ответ 400 происходит на более высоком уровне, вам нужно будет проверить соответствующий документ в соответствии с тем, как развернут ваш проект

Также FYIY django.core.WSGIHandler выдает ответ 400, когда a UnicodeDecodeError происходит при создании HttpRequest экземпляра объекта — в этом случае AFAICT промежуточные программы даже не будут вызваны. Вы уже должны найти следы этих событий в регистраторе, настроенном для django.requests (cf https://docs.djangoproject.com/en/1.10/topics/logging/#django-request )