Python Web开发学习

Django使用Email跟踪代码错误

2018-12-09  本文已影响0人  吾星喵

Django使用Email跟踪代码错误

运行到服务器上后DEBUG=False,当访问出现异常时,通过邮件发送错误到设置的邮箱。

发送错误

当运行着公开的网页时,你应该把设置中的 DEBUG=False。 这将使服务器运行得更快,并且还可以防止恶意用户在错误页面中看到应用的详细信息。

然而,把 DEBUG 设置为 False, 这意味着不会在你的网站上看到错误的细节,所有的人都只是看到公开的错误页面。当需要在部署的网页上追踪出现的错误,Django 可以通过设置去报告错误的细节。

通过邮件方式报告

Server errors

当DEBUG为False时,Django将在代码引发未处理异常并导致内部服务器错误(HTTP状态代码500)时向ADMINS设置中列出的用户发送电子邮件。这将立即通知管理员任何错误。管理员将获得错误的描述、完整的Python回溯以及导致错误的HTTP请求的详细信息。

ADMIN配置

关于settings.py中的ADMIN,默认为: [] (空列表)

获得代码错误通知的所有人的列表。当DEBUG=FalseAdminEmailHandler在日志中配置(默认情况下完成)时,Django将请求/响应周期中引发的异常的详细信息发送给这些人。

列表中的每一项都应该是(全名、电子邮件地址)元组。例子:

# 将请求/响应周期中引发的异常的详细信息发送邮箱配置
ADMINS = [('admin', 'qq@qq.com'), ('another', 'email@xxx.com')]

为了发送电子邮件,Django需要一些设置来告诉它如何连接到邮件服务器。至少,需要指定EMAIL_HOST,可能还需要指定EMAIL_HOST_USEREMAIL_HOST_PASSWORD,不过还需要根据邮件服务器的配置进行其他设置。有关电子邮件相关设置的完整列表,请参阅Django设置文档

默认情况下,Django将从root@localhost发送电子邮件。然而,一些邮件提供商拒绝来自该地址的所有电子邮件。若要使用不同的发件人地址,请修改SERVER_EMAIL设置。

要激活此行为,请将收件人的电子邮件地址放在ADMIN设置中。

settings.py中的设置

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.yeah.net'  # smtp地址
EMAIL_HOST_USER = 'xxx@yeah.net'  # smtp 服务器的用户名
EMAIL_HOST_PASSWORD = 'password'  # smtp服务器的密码
# 管理员站点
SERVER_EMAIL = 'xxx@yeah.net'
# 将请求/响应周期中引发的异常的详细信息发送邮箱配置
ADMINS = [('admin', 'qq@qq.com'), ]

服务器错误电子邮件使用日志框架发送,因此可以通过自定义日志配置来自定义此行为。

404 errors

Django还可以配置为发送关于断开链接的错误邮件(404“page not found”错误)。

Django在什么时候发送404错误的电子邮件

如果满足这些条件,Django将在代码出现404并请求有引用程序时向manager设置中列出的用户发送电子邮件。对于没有Referer(HTTP 请求header 的一部分)的404错误,它不需要发送电子邮件——那些通常只是访问了损坏的url或损坏的网络机器人。当引用程序等于请求的URL时,它也会忽略404,因为这种行为也是来自损坏的Web机器人。

BrokenLinkEmailsMiddleware必须出现在拦截404错误的其他中间件之前,例如LocaleMiddlewareFlatpageFallbackMiddleware。将它放在中间件设置的顶部。

您可以通过调整IGNORABLE_404_URLS设置来告诉Django停止报告特定的404s。它应该是已编译正则表达式对象的列表。例如:

https://docs.djangoproject.com/zh-hans/2.1/howto/error-reporting/#errors

上一篇下一篇

猜你喜欢

热点阅读