亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當用戶遇到帶有所有請求值(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 最好在新線程上發送電子郵件,這樣用戶就不會被阻止。


我們還可以在這封電子郵件中包含堆?;厮輙raceback.formatexc。


這需要一些工作,因為我們基本上是重寫已經內置的現有代碼,但我還沒有找到允許我們將文本添加到 logging.handler 的電子郵件的解決方案。


查看完整回答
反對 回復 2021-09-02
  • 1 回答
  • 0 關注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號