Refactored the HTTP 500 error response creation slightly. Provides the ability
for subclassing that piece of the processing path. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7928 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e7e4b8b0f7
commit
57bb10e6c4
|
@ -60,7 +60,6 @@ class BaseHandler(object):
|
||||||
def get_response(self, request):
|
def get_response(self, request):
|
||||||
"Returns an HttpResponse object for the given HttpRequest"
|
"Returns an HttpResponse object for the given HttpRequest"
|
||||||
from django.core import exceptions, urlresolvers
|
from django.core import exceptions, urlresolvers
|
||||||
from django.core.mail import mail_admins
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
# Apply request middleware
|
# Apply request middleware
|
||||||
|
@ -122,21 +121,36 @@ class BaseHandler(object):
|
||||||
|
|
||||||
if settings.DEBUG_PROPAGATE_EXCEPTIONS:
|
if settings.DEBUG_PROPAGATE_EXCEPTIONS:
|
||||||
raise
|
raise
|
||||||
elif settings.DEBUG:
|
return self.handle_uncaught_exception(request, resolver, exc_info)
|
||||||
from django.views import debug
|
|
||||||
return debug.technical_500_response(request, *exc_info)
|
def handle_uncaught_exception(self, request, resolver, exc_info):
|
||||||
else:
|
"""
|
||||||
# When DEBUG is False, send an error message to the admins.
|
Processing for any otherwise uncaught exceptions (those that will
|
||||||
subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
|
generate HTTP 500 responses). Can be overridden by subclasses who want
|
||||||
try:
|
customised 500 handling.
|
||||||
request_repr = repr(request)
|
|
||||||
except:
|
Be *very* careful when overriding this because the error could be
|
||||||
request_repr = "Request repr() unavailable"
|
caused by anything, so assuming something like the database is always
|
||||||
message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
available would be an error.
|
||||||
mail_admins(subject, message, fail_silently=True)
|
"""
|
||||||
# Return an HttpResponse that displays a friendly error message.
|
from django.conf import settings
|
||||||
callback, param_dict = resolver.resolve500()
|
from django.core.mail import mail_admins
|
||||||
return callback(request, **param_dict)
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
from django.views import debug
|
||||||
|
return debug.technical_500_response(request, *exc_info)
|
||||||
|
|
||||||
|
# When DEBUG is False, send an error message to the admins.
|
||||||
|
subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
|
||||||
|
try:
|
||||||
|
request_repr = repr(request)
|
||||||
|
except:
|
||||||
|
request_repr = "Request repr() unavailable"
|
||||||
|
message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
||||||
|
mail_admins(subject, message, fail_silently=True)
|
||||||
|
# Return an HttpResponse that displays a friendly error message.
|
||||||
|
callback, param_dict = resolver.resolve500()
|
||||||
|
return callback(request, **param_dict)
|
||||||
|
|
||||||
def _get_traceback(self, exc_info=None):
|
def _get_traceback(self, exc_info=None):
|
||||||
"Helper function to return the traceback as a string"
|
"Helper function to return the traceback as a string"
|
||||||
|
|
Loading…
Reference in New Issue