Django 错误电子邮件太长。我该如何截断它?

2024-02-09

Django 1.9 中的错误电子邮件似乎比以前长得多。有一个完整的“设置”部分,我认为这是多余的,而且可能太暴露了。

编辑 Django 发送的错误电子邮件的最佳方法是什么?

编辑:我不仅仅是想隐藏敏感信息。 Django 1.9 中的电子邮件内容较多,我想将电子邮件的格式更改为更短。我喜欢它的旧方式。


有一个 django 模板变量TECHNICAL_500_TEMPLATE/TECHNICAL_500_TEXT_TEMPLATE in the Django 调试视图 https://github.com/django/django/blob/1.9.5/django/views/debug.py它控制错误报告中可见的内容,当然还有错误电子邮件。注释解释说模板位于 python 变量中,因此在模板加载器中断时可能会生成错误。您可以在 django 包中更改此变量,但我不建议这样做。TECHNICAL_500_TEMPLATE被引用的是ExceptionReporter类在同一个文件中。

班上AdminEmailHandler in Django 实用程序日志 https://github.com/django/django/blob/1.9.5/django/utils/log.py然后使用ExceptionReporter生成 html 错误报告。

你可以子类化AdminEmailHandler并覆盖emit函数包含您的子类版本ExceptionReporter使用您自己定义的TECHNICAL_500_TEMPLATE.

这是一个例子:

Create reporter.py with

from copy import copy

from django.views import debug
from django.utils import log
from django.conf import settings
from django import template

TECHNICAL_500_TEMPLATE = """
    # custom template here, copy the original and make adjustments
"""
TECHNICAL_500_TEXT_TEMPLATE = """
    # custom template here, copy the original and make adjustments
"""

class CustomExceptionReporter(debug.ExceptionReporter):
    def get_traceback_html(self):
        t = debug.DEBUG_ENGINE.from_string(TECHNICAL_500_TEMPLATE)
        c = template.Context(self.get_traceback_data(), use_l10n=False)
        return t.render(c)

    def get_traceback_text(self):
        t = debug.DEBUG_ENGINE.from_string(TECHNICAL_500_TEXT_TEMPLATE)
        c = template.Context(self.get_traceback_data(), autoescape=False, use_l10n=False)
        return t.render(c)

class CustomAdminEmailHandler(log.AdminEmailHandler):
    def emit(self, record):
        try:
            request = record.request
            subject = '%s (%s IP): %s' % (
                record.levelname,
                ('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
                 else 'EXTERNAL'),
                record.getMessage()
            )
        except Exception:
            subject = '%s: %s' % (
                record.levelname,
                record.getMessage()
            )
            request = None
        subject = self.format_subject(subject)

        no_exc_record = copy(record)
        no_exc_record.exc_info = None
        no_exc_record.exc_text = None

        if record.exc_info:
            exc_info = record.exc_info
        else:
            exc_info = (None, record.getMessage(), None)

        reporter = CustomExceptionReporter(request, is_email=True, *exc_info)
        message = "%s\n\n%s" % (self.format(no_exc_record), reporter.get_traceback_text())
        html_message = reporter.get_traceback_html() if self.include_html else None
        self.send_mail(subject, message, fail_silently=True, html_message=html_message)

然后只需设置 django 设置即可在中使用新处理程序记录部分 https://docs.djangoproject.com/en/1.9/topics/logging/.

LOGGING = {
    # Your other logging settings
    # ...
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'project.reporter.CustomAdminEmailHandler',
            'filters': ['special']
        }
    },
}

如果您只是想隐藏设置,可以注释掉'settings': get_safe_settings(),第 294 行,如果您覆盖并复制粘贴def get_traceback_data(self):在你的CustomExceptionReporter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 错误电子邮件太长。我该如何截断它? 的相关文章

  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • django.db.utils.ProgrammingError:关系“django_content_type”不存在

    我有一个项目 我在我的电脑上慢慢建立起来 并且运行良好 我只是想将它放到服务器上 但收到此错误 django db utils ProgrammingError 关系 django content type 确实 不存在 我无法解决这个问题
  • 如何让 Django 和 ReactJS 协同工作?

    New to Django and even newer to ReactJS I have been looking into AngularJS and ReactJS but decided on ReactJS It seemed
  • 石墨烯错误消息

    我想知道是否可以翻译石墨烯提供的验证错误消息 例如 未提供身份验证凭据 如下面的代码示例所示 errors message Authentication credentials were not provided locations lin
  • 如何自动更新外键以具有“,on_delete = models.PROTECT”

    我正在将旧代码更新到最新的 Django 版本 外键需要 on delete models PROTECT 他们有将近一百个 如何自动添加 on delete models PROTECT 到每一个 您可以尝试在这里使用正则表达式 鉴于Fo
  • Django管理命令是在单独的进程中执行的吗?

    Django 有很多管理命令 此外 我们还可以编写自己的命令 进行 shell 调用后会发生什么python manage py XXX 代码是否会在从 shell 启动的进程中执行 或者 shell 进程只是与执行命令的主 Django
  • Django model.foreignKey 并返回 self.text 错误

    所以我正在 Django 中处理 model py 但遇到了 2 个 pylint 错误 我不明白为什么 这是 pylint 的问题还是我在代码中做错了什么 E1120 No value for argument on delete in
  • 如何使用 django Rest 框架通过直通模型序列化 ManyToManyField

    我有一个 Recipe 模型 其中包含 IngredientType 对象的 M2M 字段 该字段 又名成分列表 通过 Ingredient 对象使用臭名昭著的 through 模型 该对象将额外的数据添加到我的 IngredientTyp
  • 升级到 1.8.1 后 Django 管理中断

    我从 1 7 3 升级到 1 8 1 但我的管理员无法工作 并且站点无法加载 因为它在解析路径时失败 例外 Enable django contrib auth context processors auth in your TEMPLAT
  • App Engine 上的 Django 与 webapp2 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • PyCharm 中有 HTML 块 {%%} 的快捷方式吗?

    我正在使用 HTML 块 例如 block content 经常使用 但必须输入括号和百分比符号很麻烦 有没有捷径或其他方法可以自动执行此操作 到目前为止我刚刚发现这个 PyCharm 中有插入 的快捷方式吗 https stackover
  • Celery为每个任务实例安排了带有到期时间的任务?

    我有一个带有 celery 4 1 0 的 django 应用程序和带有数据库调度程序的 celerybeat 我想要的是从管理站点运行定期任务并为每个任务设置过期时间 expireperiodictask 中的属性是一个时间调度程序 停止
  • Django 1.11 我们可以在两个不同数据库的表之间创建关系吗?

    在我的项目中 我试图创建具有多个数据库的中央数据库服务 所以我的问题是我们可以在两个不同数据库的表之间创建关系吗 Example MySQL DB1 表用户 class User models Model name models CharF
  • 如何在 Django 序列化器中使用主键

    我的模型是 class UserInfo models Model user models OneToOneField User unique True mobile no models CharField max length 10 bl
  • 如何使用 DJango Rest Framework 上传多个图像?

    我可以使用以下代码上传单个图像 如果我选择多个图像 则仅上传所选图像中的最后一个图像 模型 py class Image models Model property id models ForeignKey properties Addre
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告

随机推荐

  • 在CSS中,当我滚动滚动条时,
  • 的背景颜色消失了
  • HTML 代码如下 div ol li class a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa li li class b bbbbbbbbbbbbbbbbbbbbb
  • 使用 PointToScreen 在 wpf 中查找控件的位置

    我正在尝试在主窗口内找到用户控件的相对坐标 我尝试使用 Control PointToScreen 方法 但没有成功 每次我这样做时 我都会收到一个异常 System InvalidOperationException 此视觉对象未连接到P
  • 使用 -rpath 和 $ORIGIN 链接时查找失败

    我正在尝试学习如何使用 rpathGCC 链接器 ld 中的选项 ORIGIN 我正在尝试我能想到的最简单的例子 见下文 我读到的所有链接似乎都说我做得正确 但是 当我运行可执行文件时 它无法找到共享对象 除非我从内部运行它 ORIGIN
  • 使用截然不同的需要了解的信息集对产品进行建模并将它们链接到订单项?

    我目前正在一个网站上工作 该网站销售各种类型的定制产品 我已经得到了通用的标准购物车模式 订单有许多 LineItems LineItems 有一个产品 但我遇到了一些症结 假设我们的一个产品是一个球 而我们的一个产品是一盒蜡笔 当人们创建
  • 返回类型与 Object.getClass() 不兼容

    该代码是在 eclipse 上导入 webservice 文件时生成的 但是 我在编译时看到了这个错误 返回类型与Object getClass 有什么想法可以解决这个问题吗 public java lang String getClass
  • Firestore 模拟器 REST API 身份验证

    我正在寻找 Firestore 模拟器 REST API 处理未经身份验证的请求的方式的预期行为的一些确认 因为我认为我可能发现了一些可能的不一致之处 我一直在使用 Postman 的个人项目来使用 Firestore Emulator R
  • 实体框架 6.1 更新记录的子集

    我有一个仅封装的视图模型some数据库模型属性 视图模型包含的这些属性是我想要更新的唯一属性 我希望其他财产能够保持其价值 在我的研究过程中我发现this https stackoverflow com a 15339512 2015959
  • mediaelement.js - 在第一个视频末尾播放另一个视频

    由克罗克 Video forEveryone 推荐 我希望能够在第一个视频结束后自动播放第二个视频 然后在第二个视频结束后显示静态图像 经过一段设定的时间后 循环回到第一个视频 Thanks function audio video med
  • 启动带有视频的 Youtube 应用程序

    我有一个带有 UIButton 的应用程序 我希望 当我单击 iPhone 启动 Youtube 应用程序的按钮时 我的视频可以直接开始播放 我尝试了以下代码 UIApplication sharedApplication openURL
  • 如何查找表中长列的长度

    我在名为 Files 的表中有一个名为 FileSize 的 LONG 列 为了实现这一目标 我做了以下工作 我编写了这个 PL SQL 脚本来查找大小 declare long var LONG 0 begin dbms output p
  • 有状态 Rsocket 应用程序

    在我的项目中 我想让多个客户端连接到一个服务 我正在使用 java Rsocket 实现 该服务应该为每个客户端维护一个状态 现在 我可以通过某种标识符来管理客户端 这个选项我已经实现了 但我不想使用字符串手动管理会话 所以另一个想法是通过
  • 在 C# 中使用委托

    在 C 语言和 NET 框架中 你能帮助我理解委托吗 我试图检查一些代码 发现收到的结果出乎我的意料 这里是 class Program public static int I 0 static Func
  • 为什么元组联合期望“never”作为“.includes()”参数?

    type Word foo bar baz const schema foo foo as const bar bar as const baX bar baz as const const testFn schemaKey keyof t
  • Rails:无效的单表继承类型错误

    因此 我正在努力使用现有数据库迁移这个 php 站点 但我无法将其更改为 Rails 这里有张桌子 Quotes有一列名为type 每当我尝试创建此模型并设置类型时 它都会告诉我以下错误 ActiveRecord SubclassNotFo
  • C++ 中重载赋值运算符

    据我了解 重载operator 时 返回值应该是非常量引用 A A operator const A check for self assignment do assignment return this 在以下情况下允许调用非常量成员函数
  • 使用字符串插值将字符串格式化为列

    我需要打印双精度数 以便为值的字符串表示分配一定数量的符号 例如 8 接下来的单词应该从每个字符串中的字符串开头的相同索引处开始 我现在有 value 0 test value 0 3333333333333 test value 0 5
  • 如果所有给定单词都在字符串中,则匹配正则表达式

    假设我有一个这样的查询 一二三 如果我用 替换空格 管道字符 如果字符串包含一个或多个这些单词 我可以匹配该字符串 这就像逻辑 或 是否有类似的东西可以进行逻辑与 只要字符串中存在所有单词 无论单词顺序如何 它都应该匹配 不幸的是我离开了我
  • 当两个 .c 文件具有相同符号但不同类型的全局变量时,引用如何工作?

    C 假设我有以下 C 模块 MODULE 1 include
  • 自动/机器人消息发布到 Microsoft-Teams 聊天室

    如何自动将消息发布到 Microsoft Teams 中的聊天室 这是针对单向消息传递的 即发布消息 而不是阅读消息 这里的大局是我们正在评估不同的群聊解决方案 其中一项要求是将错误消息从各种服务和程序发布到聊天室 一个明智的方法似乎是建立
  • Django 错误电子邮件太长。我该如何截断它?

    Django 1 9 中的错误电子邮件似乎比以前长得多 有一个完整的 设置 部分 我认为这是多余的 而且可能太暴露了 编辑 Django 发送的错误电子邮件的最佳方法是什么 编辑 我不仅仅是想隐藏敏感信息 Django 1 9 中的电子邮件