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

Gez*_*zim 3 python django django-settings

我已ALLOWED_HOSTS正确设置,但我不断收到来自所有类型网站的请求,这些请求会导致出现"[Django] ERROR(外部IP):内部服务器错误".

如何忽略此特定错误?

Aus*_*ips 5

一个SuspiciousOperation例外是Django的提出CommonMiddlewareHost:HTTP头不匹配所需的ALLOWED_HOSTS设置.此异常未经过特殊处理,因此错误将通过日志记录系统传播.

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

下面的代码片段是一个中间件类,您可以添加MIDDLEWARE_CLASSESsettings.py来压缩此错误.

MIDDLEWARE_CLASSES = [
    'myapp.middleware.SquashInvalidHostMiddleware',
    ....
]
Run Code Online (Sandbox Code Playgroud)

必须在之前发生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)
Run Code Online (Sandbox Code Playgroud)