Почему плоские страницы Django позволяют регистрировать ошибку 404?

#django #django-flatpages

#django #django-плоские страницы

Вопрос:

Забавная вещь, которую я заметил в flatpages приложении Django: оно позволяет core/handlers/base.py регистрировать предупреждение Not Found: $page . В результате этого мои журналы Sentry заполнены 404 для законных и рабочих страниц. Похоже, это происходит потому, что сначала Django регистрирует 404, затем возвращает HttpResponseNotFound объект, а затем запускается промежуточное программное обеспечение flatpages и возвращает правильный ответ 200.

Это то, что я мог бы считать ошибкой в Django? Я рассуждаю так: допустимая плоская страница не является отсутствующей страницей и, следовательно, не должна регистрировать сообщение 404. Нет ли другого способа перехватить 404, не регистрируя его как отсутствующий?

Ответ №1:

Я думаю, что решение вашей проблемы простое: просто измените порядок Sentry404CatchMiddleware в верхней части вашей MIDDLEWARES настройки. По крайней мере, оно должно быть выше промежуточного программного обеспечения flatpages.

Чтобы объяснить, что происходит, полезно понять порядок, в котором выполняются промежуточные программы. Я предполагаю, что вы следили за документами Sentry и поместили их внизу. Это делает его первым промежуточным программным обеспечением, которое будет выполнено. Если поступает запрос на несогласованный шаблон URL, Django выдает 404, и промежуточное программное обеспечение Sentry регистрирует его. Но затем Django запускается через другие промежуточные программы, и промежуточное программное обеспечение flatpages выполняет то, что ищет, существует ли соответствующая страница, и фактически заменяет ответ.

Если вы переместите промежуточное программное обеспечение Sentry наверх, будут регистрироваться только ошибки 404, которые проходят весь путь через стек промежуточного программного обеспечения, что, вероятно, то, что вы хотите.

Ответ №2:

Это не ошибка, это способ работы приложения django flatpages: его промежуточное программное обеспечение запускается после 404 из URL-адресов. Вот почему ваш sentry заполнен 404.

Подумайте о том, чтобы не регистрировать 404 в sentry. :/ Я не вижу здесь другого пути.

Может быть другое решение: вместо использования middleware попробуйте включить flatpages.urls в конце ваших urlpatterns.

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

1. Проблема в том, что я хочу зарегистрировать свои 404. Я просто не хочу, чтобы там были плоские страницы.

2. @rassie, может быть другое решение: вместо использования промежуточного программного обеспечения попробуйте включить плоские страницы. url-адреса в конце ваших urlpatterns.

3. Для справки, включая плоские страницы. URL-адреса будут прерывать APPEND_SLASH для всего, что не является плоской страницей. В тех случаях, когда вам нужны APPEND_SLASH, flatpages и все 404 в ваших журналах, вам необходимо выполнить собственную замену CommonMiddleware в вашем пользовательском представлении для flatpages или создать промежуточное программное обеспечение для flatpages с помощью process_request .