为什么Django的flatpages允许记录404错误?

时间:2011-10-10 08:43:12

标签: django django-flatpages

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

这不是一个错误,它是django flatpages app工作的方式:它的中间件在404之后从网址开始。这就是为什么你的哨兵满满的404.

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

可能还有另一种解决方案:不要使用middleware尝试 flatpages.urls