忽略[Django]错误(外部IP):内部服务器错误

时间:2013-09-13 01:14:01

标签: python django django-settings

我已正确设置ALLOWED_HOSTS,但我不断收到所有类型网站的请求,导致此问题导致[Django]错误(外部IP):内部服务器错误'被送出去。

如何忽略此特定错误?

2 个答案:

答案 0 :(得分:5)

SuspiciousOperation http标头与所需的CommonMiddleware设置不匹配时,Django的Host:会引发ALLOWED_HOSTS异常。此异常未经过特殊处理,因此错误将通过日志记录系统传播。

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

以下代码段是Middleware课程,您可以将其添加到MIDDLEWARE_CLASSES中的settings.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)

答案 1 :(得分:2)

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

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

现在您可以编写您的类MyAdminEmailHandler。在AdminEmailHandler

中查看其代码

在emit函数中,只需删除报​​告if(request.META.get('REMOTE_ADDR')不在settings.INTERNAL_IPS中)