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

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

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

Ответы [ 2 ]

2 голосов
/ 05 февраля 2015

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

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

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

1 голос
/ 10 октября 2011

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

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

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

...