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

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

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

2 ответа

Решение

Это не ошибка, это то, как работает приложение django для плоских страниц: его промежуточное ПО запускается после 404 из URL. Вот почему ваш часовой полон 404.

Не стоит регистрировать 404 в карауле.:/ Я не вижу здесь другого пути.

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

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

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

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

Другие вопросы по тегам