如何将登录用户附加到Django异常错误消息?

时间:2009-05-13 15:28:16

标签: django

当我从Django站点收到错误异常电子邮件时,查看当前登录用户的User和/或UserProfile信息会很有用。如何将此添加到Django站点异常错误电子邮件?

3 个答案:

答案 0 :(得分:5)

Django在电子邮件末尾追加repr(请求)。使用默认的wsgi开发服务器,您可以找到登录用户

'LOGNAME':'myuser',

这可能隐藏在某些电子邮件客户端中,因为它包含在尖括号中。

<WSGIRequest
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
...
'LOGNAME': 'myuser', 
...
wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.version': (1, 0)}>

此外,您可以实现实现process_exception方法的自定义中间件:

process_exception(self,request,exception)

request是一个HttpRequest对象。 exception是由view函数引发的Exception对象。

Django在视图引发异常时调用process_exception()。 process_exception()应返回None或HttpResponse对象。如果它返回一个HttpResponse对象,则响应将返回给浏览器。否则,默认的异常处理就会启动。

同样,中间件在响应阶段以相反的顺序运行,其中包括process_exception。如果异常中间件返回响应,则根本不会调用该中间件之上的中间件类。

答案 1 :(得分:4)

由于Django的变化,@ jsamsa的答案似乎不再正确(至少我没有在错误电子邮件中找到'LOGNAME'字段)。

我发布了一个替代方案,通过电子邮件接收完整的django html错误页面。详细信息如下: https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.AdminEmailHandler

这个ticket有助于指出你可以这样做:

LOGGING['handlers']['mail_admins']['include_html'] = True

答案 2 :(得分:0)

从Django版本1.10开始,本机支持此功能:请参阅https://docs.djangoproject.com/en/dev/releases/1.10/

  

将request.user添加到调试视图中。