1

关于 Django 的应用程序,我注意到一件有趣的事情flatpages:它允许core/handlers/base.py记录警告Not Found: $page。因此,我的 Sentry 日志充满了合法页面和工作页面的 404。这似乎是因为首先 Django 记录了 404,然后它返回一个HttpResponseNotFound对象,然后 flatpages 中间件启动并返回正确的 200 响应。

这是我可以认为是 Django 中的错误吗?我的理由是有效的平面页面不是丢失的页面,因此不应记录 404 消息。没有其他方法可以捕获 404 而不将其记录为丢失吗?

4

2 回答 2

2

我认为您的问题的解决方案很简单:只需将 重新排序Sentry404CatchMiddleware到设置的顶部即可MIDDLEWARES。至少,它应该在 flatpages 中间件之上。

为了解释发生了什么,了解中间件的执行顺序会很有帮助。我猜您遵循Sentry 文档并将其放在底部。这使它成为第一个要执行的中间件。如果一个不匹配的 URL 模式的请求进入,Django 会引发 404 并且 Sentry 中间件会记录它。但是 Django 然后会运行其他中间件,而 flatpages 中间件会查找匹配页面是否存在,并实际替换响应。

如果您将 Sentry 中间件移到顶部,则只会记录在中间件堆栈中冒泡的 404 错误,这可能是您想要的。

于 2015-02-05T12:09:19.593 回答
1

这不是错误,而是 django flatpages 应用程序的工作方式:它的中间件在 404 之后从 url 启动。这就是为什么你的哨兵充满了404。

考虑不在哨兵中注册 404。:/我在这里看不到任何其他方式。

可能还有另一种解决方案:而不是在您的 urlpatterns末尾middleware使用尝试包含。 flatpages.urls

于 2011-10-10T19:52:19.163 回答