Ну, вы можете попытаться перехватить любые исключения в промежуточном программном обеспечении, например:
from django.core.urlresolvers import resolve
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if response.status_code == 500:
current_url = resolve(request.path_info).view_name
content = response.contnet
ExceptionHandlerModel.objects.create(url = current_url,stacktrace = content, ...) # other data you want to store here
return response
Вот и все, это не будет иметь никакого смысла , если вы не сохраните содержимое из response.content
, который полон html .Поэтому я думаю, вам следует избегать этого решения в целом.
Наилучшим подходом было бы использование logger .Например, в вашем loginview
вы можете попробовать так:
import logging
logger = logging.getLogger(__name__)
def loginview(request):
...
user = authenticate(username, password)
if not user:
logger.error('Username {} failed to login'.format(username))
представление входа в систему также не обязательно вызывает исключение (если только вы не принудительно выбросили их).Например:
class YourAuthException(Exception):
# defining a custom exception
pass
# in view
if not user:
raise YourAuthException("User login failed")
Обновление
def get_user(request)
user = User.objects.get(id=99999999999) # an id which does not exist in DB
return HttpResponse("OK GOT IT")