【问题标题】:Will Django send me an email if exception rises at admin site?如果管理站点出现异常,Django 会向我发送电子邮件吗?
【发布时间】:2011-12-21 07:17:16
【问题描述】:

Django documentation 说:

当 DEBUG 为 False 时,Django 将通过电子邮件发送给 ADMINS 中列出的用户 每当您的代码引发未处理的异常和结果时设置 出现内部服务器错误(HTTP 状态代码 500)。

但这是否包括 django 管理站点?如果没有,我该如何启用此类报告?

我问这个是因为当我在 ModelAdmin 子类中故意提出Exception 时,我没有收到任何电子邮件。

另一方面,我尝试手动发送,效果很好。

$ ./manage.py shell
>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('Hello', 'World', to=['email@example.com'])
>>> email.send()

更新: 当应用程序的 API 部分(由活塞驱动)出现异常时,Django 也会发送崩溃报告。

非常感谢任何帮助。

【问题讨论】:

  • 没有完全回答您的问题,但请查看 django-sentry (readthedocs.org/docs/sentry/en/latest/index.html)。它来自 Disqus 背后的团队,已经成为我绝对不可缺少的调试工具。
  • 您可以尝试在您的应用程序(不是管理员应用程序)中引发异常吗?你能收到这样的邮件吗?
  • @ChrisPratt django-sentry 最终可能是一个选择。但在我看来,这似乎是矫枉过正。无论如何感谢您的评论。
  • @JakubGocławski 是的,我可以收到这样的电子邮件。刚刚测试过了。
  • 你能告诉我们你用来在ModelAdmin子类中引发异常的代码吗?

标签: django django-admin django-email django-errors


【解决方案1】:

在这种情况下,管理站点没有什么特别之处。当管理员视图引发未处理的异常时,Django 会向您发送一封电子邮件。

排错思路 1

您是否测试过您是否会收到非管理员视图的电子邮件?会不会是权限问题?与您从 shell 测试电子邮件时相比,网络服务器可能以不同的用户身份运行。

排错思路2

您在 ModelAdmin 的哪个位置提出异常?

以下示例将不起作用,因为在定义 ModelAdmin 类时引发了异常,而不是在处理请求时引发。

class MyModelAdmin(ModelAdmin):
    raise Exception

相反,在方法中引发异常。您应该收到以下型号的电子邮件,如果您转到它的更改视图网址(例如 /admin/app/mymodel/

class MyModelAdmin(ModelAdmin):
    def get_queryset(self, request, queryset):
        raise Exception

【讨论】:

  • 在非管理员视图中进行了测试。崩溃报告已成功发送。还更新了我的问题。
  • 用另一个故障排除想法更新了答案。
猜你喜欢
  • 2010-11-27
  • 2018-10-17
  • 2017-05-03
  • 2018-11-20
  • 2012-10-12
  • 2017-04-17
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多