您可以只回收 Django 的中间件并删除标头中对引用者的条件检查:
class BrokenLinkEmailsMiddleware(object):
def process_response(self, request, response):
"""
Send broken link emails for relevant 404 NOT FOUND responses.
"""
if response.status_code == 404 and not settings.DEBUG:
domain = request.get_host()
path = request.get_full_path()
referer = request.META.get('HTTP_REFERER', 'None')
is_not_search_engine = '?' not in referer
is_ignorable = self.is_ignorable_404(path)
if is_not_search_engine and not is_ignorable:
ua = request.META.get('HTTP_USER_AGENT', '<none>')
ip = request.META.get('REMOTE_ADDR', '<none>')
mail_managers(
"Broken link on %s" % domain,
"Referrer: %s\nRequested URL: %s\nUser agent: %s\nIP address: %s\n" % (referer, path, ua, ip),
fail_silently=True)
return response
def is_ignorable_404(self, uri):
"""
Returns True if a 404 at the given URL *shouldn't* notify the site managers.
"""
return any(pattern.search(uri) for pattern in settings.IGNORABLE_404_URLS)