Колба отправляет электронную почту, когда пользователь сталкивается с ошибкой СО всех значений запроса (POST / GET) - PullRequest
0 голосов
/ 30 ноября 2018

Стандартный код в инфраструктуре 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_app
response = self.full_dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Python27\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Python27\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "hello.py", line 6, in hello_world
raise Exception
Exception

То, что в нем нет, - это переменные GET / POST, которые вводят пользователи.Это может быть ключом к процессу отладки, и это мой вопрос.Как вы можете включить в это письмо все request.form переменные (для GET / POST)?

Хотя я не смог найти прямой ответ на вопрос через Google, самый близкий ресурс, который я нашел, - это Flaskdocs (http://flask.pocoo.org/docs/1.0/logging/#logging), в котором есть раздел "Информация о запросе на инъекцию" , в котором говорится о подклассе logging.Formatter, но он относится к дополнительной информации, такой как IP-адреса, и требует определения конкретных значений.

Что приводит меня к моему вопросу:

Как можно изменить адрес электронной почты, включив в нее ошибку И данные всех запросов (GET / POST) от пользователей?

1 Ответ

0 голосов
/ 16 декабря 2018

Две недели спустя и до сих пор нет однозначного ответа на мой вопрос.Обходной путь, который я нашел, состоит в том, чтобы изменить обработчик ошибок 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...