3

我已经ALLOWED_HOSTS正确设置了我的设置,但是我不断收到来自所有类型的站点的请求,这些请求导致这个“[Django] ERROR (EXTERNAL IP): Internal Server Error”被发送出去。

如何忽略此特定错误?

4

2 回答 2

5

当http 标头与所需设置不匹配时SuspiciousOperation,Django 会引发异常。这个异常没有被特殊处理,因此错误会通过日志系统传播。CommonMiddlewareHost:ALLOWED_HOSTS

您可以使用 lborgav 的答案以不同方式转移所有错误消息,但如果您只想捕获这个错误,您可以设计一个自定义中间件。

以下代码段是一个中间件类,您可以将其添加到其中MIDDLEWARE_CLASSESsettings.py消除此错误。

MIDDLEWARE_CLASSES = [
    'myapp.middleware.SquashInvalidHostMiddleware',
    ....
]

必须发生在 之前django.middleware.common.CommonMiddleware,因为您想检测错误条件的存在并立即返回响应,然后再进行CommonMiddleware会产生异常的情况。

# myapp/middleware/__init__.py

from django.core.exceptions import SuspiciousOperation
from django.views.defaults import server_error


class SquashInvalidHostMiddleware(object):
    """
    Middleware class to squash errors due to suspicious Host: headers.
    """

    def process_request(self, request):
        """
        Check for denied Hosts.
        """

        try:
            # Attempt to obtain Host: from http header.  This may elicit a
            # SuspiciousOperation if Host: doesn't match ALLOWED_HOSTS.
            # Unceremoniously squash these errors to prevent log emails,
            # diverting straight to 500 page.

            request.get_host()
        except SuspiciousOperation:
            return server_error(request)
于 2013-09-13T06:01:18.633 回答
2

在您的 LOGGING 配置中,您可以覆盖处理程序类

'handlers': {
    'mail_admins': {
    'level': 'ERROR',
    'class': 'django.utils.log.MyAdminEmailHandler',
    'include_html': True,
    }
},

现在您可以编写您的类 MyAdminEmailHandler。在AdminEmailHandler中检查其代码

在发出函数中,如果 (request.META.get('REMOTE_ADDR') 不在 settings.INTERNAL_IPS) 中,就去掉报告

于 2013-09-13T05:06:01.040 回答