为了账号安全,请及时绑定邮箱和手机立即绑定

当用户遇到带有所有请求值(POST/GET)的错误时,Flask 发送电子邮件

当用户遇到带有所有请求值(POST/GET)的错误时,Flask 发送电子邮件

手掌心 2021-09-02 15:02:14
Flask 框架中的标准代码允许在用户遇到导致错误的页面时向人们发送电子邮件,通常(以及我已实现的)在app.py脚本中如下所示:from app import app...if not app.debug:    import logging    from logging.handlers import SMTPHandler    mail_handler = SMTPHandler(EMAIL_SERVER,                               EMAIL_FROM,                               EMAIL_ADMINS,                                EMAIL_SUBJECT,                               credentials=(EMAIL_ EMAIL,'***'),                               port=EMAIL_PORT)    mail_handler.setLevel(logging.ERROR)    app.logger.addHandler(mail_handler)这很棒,因为它会发送一封包含启动调试过程信息的电子邮件,如下所示:Exception on / [GET]Traceback (most recent call last):File "C:\Python27\lib\site-packages\flask\app.py", line 1817, in wsgi_appresponse = self.full_dispatch_request()File "C:\Python27\lib\site-packages\flask\app.py", line 1477, in full_dispatch_requestrv = self.handle_user_exception(e)File "C:\Python27\lib\site-packages\flask\app.py", line 1381, in handle_user_exceptionreraise(exc_type, exc_value, tb)File "C:\Python27\lib\site-packages\flask\app.py", line 1475, in full_dispatch_requestrv = self.dispatch_request()File "C:\Python27\lib\site-packages\flask\app.py", line 1461, in dispatch_requestreturn self.view_functions[rule.endpoint](**req.view_args)File "hello.py", line 6, in hello_worldraise ExceptionException这不包含用户输入的 GET/POST 变量。这些可能是调试过程的关键,这就是我的问题。您如何request.form在这封电子邮件中包含所有变量(用于 GET/POST)?虽然我无法通过 Google 找到该问题的直接答案,但我找到的最接近的资源是 Flask 文档(http://flask.pocoo.org/docs/1.0/logging/#logging),其中有一个部分“注入请求信息”讨论了子类化,logging.Formatter但它指的是额外的信息,例如 IP 地址,并需要识别特定的值。这让我想到了我的问题:如何修改日志电子邮件以包含来自用户的错误和所有请求(GET/POST)数据?
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

两周后,仍然没有明确回答我的问题。我发现的解决方法是修改 500 错误处理程序:


@app.errorhandler(500)

def status_code_500(exc):

    # do stuff in here

从这里的解决办法是将所有转储request.args和request.form值到使用字符串json.dumps(request.args, indent=4, sort_keys=True)。这可以变成电子邮件,我们可以使用它@app.errorhandler通过 SMTPhandler 最好在新线程上发送电子邮件,这样用户就不会被阻止。


我们还可以在这封电子邮件中包含堆栈回溯traceback.formatexc。


这需要一些工作,因为我们基本上是重写已经内置的现有代码,但我还没有找到允许我们将文本添加到 logging.handler 的电子邮件的解决方案。


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信