我已经正确地设置了我的ALLOWED_HOSTS,但是我不断地收到来自所有类型站点的请求,这些站点导致发送'Django错误(外部IP):内部服务器错误‘。
我怎么能忽略这个特定的错误?
发布于 2013-09-13 06:01:18
当Django的SuspiciousOperation http头与所需的ALLOWED_HOSTS设置不匹配时,会在Host:的ALLOWED_HOSTS中引发Host:异常。此异常不被特别处理,因此错误通过日志记录系统传播。
您可以使用lborgav的答案以不同的方式转移所有错误消息,但是如果您只想捕获这一错误,则可以设计一个自定义中间件。
下面的代码片段是一个中间件类,您可以将它添加到settings.py中的MIDDLEWARE_CLASSES中,以消除此错误。
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-13 05:06:01
在日志记录配置中,可以重写处理程序类。
'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中)
https://stackoverflow.com/questions/18776709
复制相似问题